java 使用beans.xml文件配置CDI Bean

xwmevbvl  于 2023-02-21  发布在  Java
关注(0)|答案(5)|浏览(165)

我有一个非常简单的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/

kb5ga3dv

kb5ga3dv1#

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

sh7euo9m

sh7euo9m2#

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

public class Sample {

    private String text;

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

lc8prwob3#

您是否尝试过实现一个javax.enterprise. inject.spi.扩展,该扩展像这样 Package 一个注入目标来@Observes ProcessInjectionTarget?
这个例子从资源包注入bean值。

jobtbby3

jobtbby34#

在您发布的示例链接中,如果您看到.xml文件,它会先使用包名,然后使用类名,因此如果您尝试将<ress:Sample>更改为<ress:net.resourceAuth.Sample>,它可能会工作。

bksxznpy

bksxznpy5#

EJB可以通过XML进行配置。它是ejb-jar.xml

相关问题