【问题标题】:CDI bean configuration using beans.xml file使用 beans.xml 文件的 CDI bean 配置
【发布时间】:2013-10-10 04:39:50
【问题描述】:

我有非常简单的 CDI bean:

package net.resourceAuth;

public class Sample {

   private String text;

   public String getText() {
    return text;
   }

   public void setText(String text) {
    this.text = text;
   }
}

现在我想使用beans.xml 初始化text 变量。我正在尝试使用像这样的beans.xml 文件:

<beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:res="urn:java:net.resourceAuth"
    xsi:schemaLocation="
    http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">

    <res:Sample>
      <res:text>test123</res:text>
    </res:Sample>

</beans>

但它不起作用。 text 始终为空。你能帮我弄清楚这里有什么问题吗?

换句话说:我正在寻找一个类似的解决方案,因为它在 JSF faces-config.xml 中使用,例如这里描述:http://www.mkyong.com/jsf2/configure-managed-beans-in-jsf-2-0/

【问题讨论】:

    标签: java jsf-2 java-ee-6 cdi weld


    【解决方案1】:

    没有针对此问题的内置解决方案。您可以使用一些第三方解决方案,例如 Apache DeltaSpike http://deltaspike.apache.org/ 或您自己使用 CDI 扩展来实现它。

    【讨论】:

      【解决方案2】:

      我真的不知道这种配置可以在beans.xml 中进行(这可能只在 Spring 中有效,但也许有人会纠正我)。 CDI初始化值的方式是@PostConstruct注解的方法,试试这个

      public class Sample {
      
          private String text;
      
          @PostConstruct
          public void init() {
               this.text = "aaa";
          }
      }
      

      【讨论】:

      • 我想在外部属性文件中配置这个组件(设置text的起始值)。因此,您的回答不符合我的要求。也许您知道另一种进行此类配置的方法?
      • 我知道,但就像我说的那样,我怀疑是否有任何其他选择 CDI。无论如何,你从哪里得到beans.xml 中&lt;res:Sample&gt; 的语法?
      • 这是一个旧的参考。这是行不通的。 CDI 中没有任何内容,或者任何允许您执行此操作的实现。你可以写一个扩展来让你这样做,但它很乱。
      • 那么还有其他方法可以满足我的要求吗?在外部文件中配置 CDI bean。类似于 JSF Managed Beans( faces-config.xml 文件)?
      • @pWoz 我认为 Apache DeltaSpike 实现了 @ConfigValue 功能,但最后我检查它没有记录。尝试将您的要求通过电子邮件发送给用户列表,他们通常会很快回复。
      【解决方案3】:

      您是否尝试过像Wrapping an InjectionTarget 那样实现@Observes ProcessInjectionTarget 的javax.enterprise.inject.spi.Extension?

      此示例从资源包中注入 bean 值。

      【讨论】:

      • 我还没有。我认为我的问题有一个内置的解决方案。但可能我必须自己实现它。
      【解决方案4】:

      在您发布的示例链接中,如果您看到 .xml 文件,它使用包名,然后是类名,因此,如果您尝试从 &lt;ress:Sample&gt; 更改为 &lt;ress:net.resourceAuth.Sample&gt;,它可能会起作用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-01-20
        • 2013-01-03
        • 2018-09-26
        • 1970-01-01
        • 2012-05-19
        • 2013-02-15
        • 1970-01-01
        相关资源
        最近更新 更多