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

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

 2009-11-11 00:00:00 来源:WEB开发网   
核心提示: 魔法属性Geronimo 架构定义了特殊的属性类型,叫做魔法属性,Apache Geronimo 中的依赖注入,第 2 部分: 下一代(6),魔法属性装入的值取决于装入 GBean 的环境,例如,单一引用许多 DI 的支持者愿意采用构造函数注入,因为这意味着注入的类永远不会出现依赖项不存在的情况

魔法属性

Geronimo 架构定义了特殊的属性类型,叫做魔法属性。魔法属性装入的值取决于装入 GBean 的环境。例如,魔法属性 kernel 指向内核,它自动被框架注入到类中。类似地,ClassLoader 属性注入当前类装入器,ObjectName 属性把当前名称注入 GBean。 清单 4 显示了 kernel 属性的用法,它被自动注入到定义生命周期的类中。所有魔法属性的完整列表位于内核的 GBeanMBean 类 中。魔法属性不是持久性的,因为它们与启动环境绑定在一起。

GBean 中的 DI

清单 3 所示的 customer 类是使用 setter 注入的类的良好示例。接下来,将看到构造函数注入的示例,以及 Geronimo 的部署计划定义容器注入代码的方式。正如在本系列的 第一篇文章 中解释过的,构造函数注入表明框架会提供类在初始化时需要的构造函数参数。

单一引用

许多 DI 的支持者愿意采用构造函数注入,因为这意味着注入的类永远不会出现依赖项不存在的情况。清单 5 显示的 GBean 被定义成使用构造函数注入来提供 Customer 引用。


清单 5. 使用构造函数注入的 HumanResources 类
package com.nealford.articles.di_geronimo; 
import org.apache.geronimo.gbean.GBeanLifecycle; 
import org.apache.geronimo.gbean.GBeanInfoBuilder; 
import org.apache.geronimo.gbean.GBeanInfo; 
import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 
public class HumanResources implements GBeanLifecycle { 
  private static Log log = LogFactory.getLog(HumanResources.class); 
  private Customer customer1; 
  private static final GBeanInfo GBEAN_INFO; 
  static { 
    GBeanInfoBuilder infoFactory = new GBeanInfoBuilder( 
        "HumanResources", 
         HumanResources.class); 
    // attributes 
    infoFactory.addReference("Customer", Customer.class); 
    // operations 
    infoFactory.setConstructor(new String[]{"Customer1"}); 
    GBEAN_INFO = infoFactory.getBeanInfo(); 
  } 
  public HumanResources(Customer customer1) { 
    this.customer1 = customer1; 
  } 
  public void doStart() throws Exception { 
    log.info("Starting HR GBean"); 
  } 
  public void doStop() throws Exception { 
    log.info("Stopping HR GBean"); 
  } 
  public void doFail() { 
    log.info("HR GBean failure!"); 
  } 
} 

上一页  1 2 3 4 5 6 7  下一页

Tags:Apache Geronimo 依赖

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