我正在使用 Glassfish 3.1.2.2、java ee6。
我有一个库,其中一个类使用 CDI 来获取一个帮助类。我想在一个使用该库的特定项目中覆盖该 CDI 依赖项并强制该库使用我自己的帮助程序类,而不是特定于该项目。我可以随意修改库,但默认情况下它应该使用其默认的帮助程序类,这样库的其他用户的行为就不会改变。
这应该是@Alternative
CDI模式的完美应用。我为帮助类 API 制作了一个 java 接口;库中有一个默认实现,然后我可以使用;<alternatives>
中的标签 beans.xml
在我想要覆盖行为的项目中,我会在该特定项目的 beans.xml 中指定我自己的帮助程序实现。
除非它不起作用。在 CDI 1.0 (java ee6) 中,从库外部的库中覆盖替代行为显然是 不可能的。
因此,无论我在外部项目的 beans.xml 中指定什么,CDI 都会继续选择库中定义的 bean。
我考虑过通过生产者,但我没有找到如何让 CDI 将 EntityManager 作为参数提供给生产者,以便我可以将其传递给辅助类。@PersistenceContext
在这个项目中,我们通常使用注解注入 EntityManager 。
关于如何从外部项目覆盖 CDI 注入的任何想法?