使用beans.xml文件进行CDI bean配置

时间:2013-10-03 13:01:56

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

我有非常简单的CDI bean:

package net.resourceAuth;

public class Sample {

   private String text;

   public String getText() {
    return text;
   }

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

现在我想使用text初始化beans.xml变量。我正在尝试像这样的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/

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

public class Sample {

    private String text;

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

在您发布的示例链接中,如果您看到.xml文件,则会使用包名称,然后使用类名称,因此如果您尝试从<ress:Sample>更改为<ress:net.resourceAuth.Sample>,则可能会有效。< / p>