jakarta-ee - 使用 CDI 注入(inject)非托管类?

标签 jakarta-ee jsf-2 cdi jboss-weld

我正在用 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/

相关文章:

java - 如何使用 Eclipse Mars 在部署描述符中定义 servlet?

java - <jsp :useBean> tag creates a bean? 如何

hibernate - 如果存在类似的行,如何避免创建新行?

ajax - JSF f :ajax cannot locate component on context

jsf - 所有 @ViewScoped 注释(JSF、CDI、OmniFaces)的行为都类似于 @RequestScoped

java - JAX-RS 是否适合作为 MVC 框架?

java - JSF:AJAX 测试最佳实践

validation - 禁用/启用 h :commandButton on validation fails/is ok

java - Weld 和测试 jar

java - M2E Eclipse Maven 工作区解析和 CDI