我使用的是 JBoss 6.1,它不完全符合 EJB 3.1。截至目前,我无法通过以下方式将 EJB 注入到我的 Struts 操作类(或任何非 Java EE 容器管理的类中):@EJB
,但是当 EJB 3.1 规范完全实现时这可能吗?
如果没有,在可预见的将来,由于性能原因,是否太不可行了?
任何容器都无法将任何内容注入到非托管对象中。
为了能够注入一个对象,容器需要管理该对象的生命周期,或者至少参与其生命周期的管理,这样它就可以在早期阶段获取该对象来进行注入。如果一个对象在没有暴露给容器的情况下被创建和使用(正如我想象的 Struts 动作 bean 一样),那么容器永远没有机会向其中注入任何东西。容器并不神奇——它不能仅仅检测在 JVM 中创建的对象并对它们执行操作。
Mikko 的答案列出了可注射对象的种类。除非动作豆是其中之一,否则恐怕没有骰子。
现在,说了这么多,隧道尽头出现了曙光:很可能为 Struts 编写一个处理注入的扩展。 @EJB 和 @Resource 注入相当直接地对应于特定的 JNDI 查找;扩展可以反射性地查找带注释的字段,然后执行相应的 JNDI 查找并注入结果。 CDI 注入甚至更容易,因为它有一个专门用于编写扩展的 API。有关执行所有这些操作的示例,请查看条纹注射浓缩机,它添加了对 @EJB、@Resource 和 @Inject 的支持Stripes网络框架。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)