对于EJB3.0来说,依赖注入就是由容器负责查找被依赖的对象并注入到依赖bean中,而bean本身不再需要进行JNDI或者context查询。此外,依赖注入发生在任何业务方法被调用之前,而且支持setter方法注入和域注入两种方式。
通过与标注结合使用,在bean类中声明依赖注入是非常简单的 (当然,也可以在部署描述符文件中声明依赖注入):
[b]@EJB[/b] 用于注入EJB业务对象
[b]@PersistenceUnit[/b] 用于注入EntityManagerFactory
[b]@PersistenceContext[/b] 用于注入EntityManager
[b]@Resource[/b] 用于注入其它资源对象,如连接工厂、消息目标等
示例:
[code]@Stateless
public class ServiceBean implements ServiceRemote {
private DataSource ds;
@Resource(mappedName="LocalDataSource")
public void setMyDS(DataSource ds) {
this.ds = ds;
}
@EJB(beanName=“AccountBean")
private AccountRemote account;
}[/code]
[b]在何处可以使用依赖注入?[/b]
EJB3.0依赖注入[b]仅可以[/b]由受管对象使用,受管对象是指由Java EE容器管理的对象,比如EJB或Servlet,而不是那些诸如助手类(helper class)的一切类。例如,如果我们有一个EJB,我们可以在EJB3.0使用依赖註入,而不是在它所依赖的助手类上使用依赖注入。下表列出了在web 和EJB模块中支持依赖注入的类型:
通过与标注结合使用,在bean类中声明依赖注入是非常简单的 (当然,也可以在部署描述符文件中声明依赖注入):
[b]@EJB[/b] 用于注入EJB业务对象
[b]@PersistenceUnit[/b] 用于注入EntityManagerFactory
[b]@PersistenceContext[/b] 用于注入EntityManager
[b]@Resource[/b] 用于注入其它资源对象,如连接工厂、消息目标等
示例:
[code]@Stateless
public class ServiceBean implements ServiceRemote {
private DataSource ds;
@Resource(mappedName="LocalDataSource")
public void setMyDS(DataSource ds) {
this.ds = ds;
}
@EJB(beanName=“AccountBean")
private AccountRemote account;
}[/code]
[b]在何处可以使用依赖注入?[/b]
EJB3.0依赖注入[b]仅可以[/b]由受管对象使用,受管对象是指由Java EE容器管理的对象,比如EJB或Servlet,而不是那些诸如助手类(helper class)的一切类。例如,如果我们有一个EJB,我们可以在EJB3.0使用依赖註入,而不是在它所依赖的助手类上使用依赖注入。下表列出了在web 和EJB模块中支持依赖注入的类型: