如何为一个类实例化多个CDI/Weld bean?

smi*_*esh 6 jsr299 java-ee cdi java-ee-6 jboss-weld

在Spring中,可以通过在xml conf中定义相应的bean来实例化任何类.也可以为具有不同参数的同一个类实例化多个bean ...

CDI中的这些功能也是如此,即是否可以使用不同的初始化参数创建同一类的不同实例?

是否也可以在不更改类的情况下创建bean ....我的意思是不添加注释?

添加

让我举个例子.

<bean id="someBean1" class="org.mm.MyBean">
    <property name="x" value="xx"/>
    <property name="y" value="yy"/>
    <property name="z" value="zz"/>       
</bean>
<bean id="someBean2" class="org.mm.MyBean">
    <property name="x" value="other value"/>
    <property name="y" value="yy2"/>
    <property name="z" value="zz2"/>       
</bean>
Run Code Online (Sandbox Code Playgroud)

如何实例化同一个类的两个实例并使用不同的字段值初始化它们?

jan*_*oth 4

据我所知有两个选择:

  • 在不进一步了解您的用例的情况下,我假设您想要为(模拟)测试或配置问题提供一些替代实现(例如 OrderService 的另一个 PaymentProvider)。这是规范本身支持的,请查看@Alternative 此处(不要重复我最初的错误并忘记激活 beans.xml 中的替代项)

  • 要获得 Spring 风格的 XML 配置,您可以使用Seam 3 Config,它提供了如上所述的 XML 配置。顺便说一句,这已经是 JSR 299 的一部分,但由于某种原因已从规范中删除。