[英]How to instantiate more CDI beans for one class?
注意 :三年前,在EE 6时代已经问过类似的问题, 请问如何为一个类实例化一个CDI / Weld bean? EE 7中有更改吗?
在Spring中,可以通过在xml conf中定义相应的bean来实例化任何类。 对于具有不同参数的一类 ,也可以实例化更多bean。
是否可以在CDI中做到这一点,我的意思是创建一个实例而不创建另一个类?
春季示例:
<bean id="foo" class="MyBean">
<property name="someProperty" value="42"/>
</bean>
<bean id="hoo" class="MyBean">
<property name="someProperty" value="666"/>
</bean>
我将为MyBean创建限定符FooQualifier,HooQualifier和Producer,如下所示:
@ApplicationScoped
public class MyBeanProducer {
@Produces
@FooQualifier
public MyBean fooProducer() {
return new MyBean(42);
}
@Produces
@HooQualifier
public MyBean hooProducer() {
return new MyBean(666);
}
}
然后,如果您在某个地方,请执行以下操作:
@Inject
@FooQualifier
private MyBean foo;
您将拥有MyBean实例,其foo.getSomeProperty()等于42,并且如果这样做:
@Inject
@HooQualifier
private MyBean hoo;
您将拥有MyBean实例,其foo.getSomeProperty()等于666。
另一种可能性是拥有一个可配置的限定符:
@Target( { TYPE, METHOD, PARAMETER, FIELD })
@Retention(RUNTIME)
@Documented
@Qualifier
public @interface ConfigurableQualifier {
@Nonbinding
int value() default 0;
}
然后是生产者方法:
@Produces
@ConfigurableQualifier
public MyBean configurableProducer(InjectionPoint ip){
int somePropertyValue = ip.getAnnotated().getAnnotation(ConfigurableQualifier.class).value();
return new MyBean(somePropertyValue);
}
然后只需调用:
@Inject
@ConfigurableQualifier(value = 11)
private MyBean configurableBean;
将导致MyBean实例的someProperty等于11。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.