【发布时间】:2015-12-07 06:48:58
【问题描述】:
这与Pass Parameter to Instance of @Inject Bean中提出的问题有关
但我需要一些不同的方法来实现。
为了在注入时传递参数,可以创建一个自定义限定符,如下所示:
@Qualifier
@Target({ TYPE, METHOD, PARAMETER, FIELD })
@Retention(RUNTIME)
@Documented
public @interface SendInject{
@Nonbinding
int value() default 0; // int value will be store here
}
要注入的类需要用@SendInject注解为:
@SendInject
public class Receiver{
int in;
private int extractValue(InjectionPoint ip) {
for (Annotation annotation : ip.getQualifiers()) {
if (annotation.annotationType().equals(SendInject.class))
return ((SendInject) annotation).value();
}
throw new IllegalStateException("No @Initialized on InjectionPoint");
}
@Inject
public Receiver(InjectionPoint ip) {
this.in= extractValue(ip);
}
..........
}
在注入 Receiver 时,所有成员都需要使用自定义限定符 @SendInject 。喜欢:
public class Sender{
@Inject
@SendInject(9)
Receiver receiver;
..................
}
我不想每次注入 Receiver 时都使用@SendInject,因为它不需要在几个点为我的实现传递参数。有什么方法可以在注入Recevier 时自定义自定义限定符,以便仅在需要传递某些参数时使用?
我尝试这样做,但在部署我的组件时得到Ambiguous dependency error。
【问题讨论】:
-
这里更合适的做法是使用生产者方法并读取生产者方法中的值,为所有依赖项查找适当的值。
标签: java javabeans cdi inject qualifiers