使用新的EJB3.1规范,可以将EJB注入pojo吗?我知道在EJB3.0中,@EJB注解可以用来注入EJB,但这在简单的pojos上不起作用。
如果不是,我必须在JNDI中查找bean,因为我知道您不能简单地使用new关键字。
发布于 2010-01-08 00:22:35
是的,使用JNDI查找。
由于您的POJO是由您(我假设)创建的,因此容器不负责注入依赖项。
发布于 2010-01-08 02:19:36
新的EJB规范(3.1)增加了为EJB指定全局JNDI名称的功能。这意味着您可以在任何地方的任何bean中使用它们。
但是,您必须执行显式JNDI查找,因为EJB3.1容器不会知道您的POJO。
唯一的例外是,如果您的POJO真的是一个应用程序客户机,那么如果包含EJB的字段是静态的,您可以对其应用@EJB注释。如果这就是您的情况,您应该查看整个JavaEE5规范中的应用程序客户机规则。
最后,包含JSR-299的Java EE 6可能允许以某种方式实现您所描述的内容;我还不了解该规范,因此无法对其进行评论。
我希望这一切都能有所帮助。
发布于 2010-01-08 21:43:58
我也想知道我是否可以inject EJBs into unmanaged objects。有关更多详细信息,请参阅Weld (JSR299参考实现)文档。
但您可以在存储库或工厂中手动执行依赖项注入,如下所示:
@Stateless
public PojoRespository {
@Inject
ResourceForPojos resource;
@PersistenceContext
private EntityManager em;
public Pojo findById(Object id) {
Pojo p = (Pojo) em.find(Pojo.class, id);
p.setResource(resource); // injects resource
return p;
}
}如果您有许多需要执行注入的方法,则可以使用拦截器。
https://stackoverflow.com/questions/2021370
复制相似问题