[weld] weld中的依赖注入
wuhaixing
2010-03-19
在java中,业务逻辑实现是通过多个类的实例协作共同完成的。当A需要访问B类的实例时,最原始的办法是new一个class B,然后调用其中定义的方法。A依赖于B,而且这种依赖关系在编译时就已经确定了,称为硬依赖紧耦合。
为了实现灵活性,对这种依赖关系进行解耦,可以采用抽象工厂模式,也可以采用依赖注入方式。基本思路都是在A和B之间介入第三方,由第三方代替A进行B的new 工作,然后将B的实例交给A使用。 目前spring 是java社区中进行依赖注入最流行的框架,它通过xml定义bean,bean有名称(identifier)及类名。在运行时,由spring根据xml配置文件管理bean之间的依赖关系。 而weld实现的依赖注入,是typesafe 的,而且会设定bean的生命周期。借助于Annotation,而不是xml中的字符串声明,可以在编译时就发现依赖关系中的错误。要理解weld中的依赖注入,需要了解几个基本概念:
来看一下spring中的bean定义及依赖注入 <bean id="userService" class="org.devproof.portal.core.module.user.service.UserServiceImpl"> <property name="userDao" ref="userDao"/> <property name="configurationService" ref="configurationService"/> <property name="emailService" ref="emailService"/> <property name="roleService" ref="roleService"/> </bean> 依赖注入 @SpringBean(name = "userService") private UserService userService; 而在weld中,是不需要进行显式的bean定义的,只要UserService是CDI中的bean,就可以直接注入。 private @Inject UserService userService; |
|
lonvea
2010-04-04
weld中有效依赖注入
1)Inject声明此Field活着Method为运行时即注入的域。 2)使用修饰类型注释注入域的功能类型,如@LoggedIn 3)使用API类型标定实例 大致一个有效而且安全的注入公式例子: @Inject @LoggedIn private UIC uic; |