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