我正在用 CDI (Weld) 替换 faces-config 中的托管 bean 声明。
问题基本上是这样的:
项目的结构分为“网络”和“核心”。 Web 具有声明为托管 Bean 的 Bean。它们还声明了不是 beans 而是 pojos 的属性(?)。核心类有集成类、领域类等。
我无法使用 @Named 命名核心类,因为它显然不熟悉应用程序 Web 部分中的工件。
今天它们是这样指定的
<managed-property>
<property-name>UserData</property-name>
<value>#{sessionScope.UserData}</value>
</managed-property>
我正在尝试阅读此内容,但希望得到一些帮助。
如何使用 CDI(甚至 JSF2?)注入(inject)不是托管 Bean 的托管属性
将托管 Bean 注入(inject)到托管 Bean 中可以完美地工作,并且 CDI 对我来说真的很不错,所以我希望尽快解决这个问题。
干杯
最佳答案
How do I inject a managed property that's not a managed bean using CDI (or even JSF2?)
如果我正确地理解了您的问题,那么 CDI-Extension 就是您的选择。您可以做的是注册一个扩展,该扩展在启动时解析您的非 CDI-Bean,将它们包装为 AnnotatedType
,从而使它们可用于注入(inject)。
看看焊接中的第 16 章 documentation ,尤其是 16.6 看起来非常像您的用例。
并且:不用担心“编写自己的扩展”听起来像是破解框架。 CDI 的设计考虑到了扩展概念,将您自己的代码片段注册为扩展非常简单且直接。
关于jakarta-ee - 使用 CDI 注入(inject)非托管类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9909545/