WEB开发网
开发学院软件开发Java Apache Geronimo 中的依赖注入,第 2 部分: 下一代... 阅读

Apache Geronimo 中的依赖注入,第 2 部分: 下一代

 2009-11-11 00:00:00 来源:WEB开发网   
核心提示: 清单 5 中的 GBean 从格式上看起来像 清单 3 中定义的 Customer GBean,但是请注意,Apache Geronimo 中的依赖注入,第 2 部分: 下一代(7),这个类没有任何 get 或 set 方法,相反,这会带来巨大的灵活性,DI 是一种已经存在多年的代码重用技术,惟

清单 5 中的 GBean 从格式上看起来像 清单 3 中定义的 Customer GBean。但是请注意,这个类没有任何 get 或 set 方法。相反,惟一的构造函数被设计成接受 Customer 对象。而且,在 attributes 部分,我定义了一个到 Customer 类的引用。在 清单 5 中建立的引用是 图 1 中的箭头表示的 GBean 间引用的一个示例。

这个 GBean 的创建者(也就是触发这个类中的构造函数的人)必须提供一个到 Customer 对象的引用。在多数情况下,构造实体是 Geronimo 容器本身。下一节将介绍构造实体如何能知道要提供客户以及要提供哪个客户。

部署计划

Geronimo 中关于引用和依赖项的信息位于部署计划中。部署计划 是 XML 文档,它们定义了要构造哪个 GBean,并解析它们的依赖项。Customer 和 Human Resources 类的部署计划如 清单 6 所示。


清单 6. 部署计划
<?xml version="1.0" encoding="UTF-8"?> 
<configuration 
  xmlns="http://geronimo.apache.org/xml/ns/deployment" 
  configId="test/HRPlan"> 
   
   
  <gbean name="test:Customer=customer1" class="Customer"> 
    <attribute name="name">Homer</attribute> 
    <attribute name="salary">2500.00</attribute> 
     
  </gbean> 
   
  <gbean name="test:HR=HumanResources" class="HumanResources"> 
    <reference name="customer1"> 
      test:Customer=customer1 
    </reference> 
    </gbean> 
</configuration> 

部署计划定义了两种类型的 GBean。对于 Customer GBean,它定义了要注入 Customer 实例的属性中的值。对于 HumanResources 类,它创建了在 HumanResources 类初始化时,Geronimo 向其中注入 Customer 实例所需要的引用。

这个示例显然是个简单的示例 —— 只有两个 GBean,每一个都使用了一种不同类型的 DI。通常,设置依赖项之间的一对一映射要比这复杂得多。例如,如果有各种不同的 Customer 子类且环境需要判断在指定情况下要注入哪个子类,该怎么办?

引用模式

Geronimo 利用引擎模式 来处理多依赖项的情况。使用引用模式,可以指定一组合法的可以注入的依赖项类型。创建引用模式的方式是在注入的类名称中使用通配符,引用模式可以在代码中使用也可以在部署计划中使用。以下代码显示了如何创建一个允许注入任何 customer 子类的引用:

bean.setReferencePattern("Geronimo.my:*"); 

结束语

本系列演示了 DI 是多么强大的代码重用机制。Geronimo 是第一个完全作为 DI 容器编写的 J2EE 服务器。在构建为 Geronimo 设计的组件时,这会带来巨大的灵活性。DI 是一种已经存在多年的代码重用技术,但是只有现在程序员才开始享受它所带来的极度松散耦合的真正好处。

上一页  2 3 4 5 6 7 

Tags:Apache Geronimo 依赖

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接