我是CDI的新手。我无法弄清楚如何使用CDI转换以下代码。
Class Client {
void method(){
List<Events> events = getEvents();
I b = new B(events);
I c = new C("Hello");
}
List<Events> getEvents(){
//Do Something
return events;
}
}
Class B implements I{
List<Events> events ;
B(List<Events> events){
this.events = events;
}
}
Class C implements I{
String s;
C(String s){
this.s = s;
}
}
我使用限定符来避免歧义,但可以弄清楚如何从客户端传递参数。我是否需要使用生产者将List和字符串分别注入B类和C类?
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})
public @interface Ii {
Type value() ;
public enum Type {
B,
C
}
}
Class Client {
@Inject @Ii(Ii.type.B)
B b;
@Inject @Ii(Ii.type.C)
C b;
}
@Ii(Ii.type.B)
Class B {
}
@Ii(Ii.type.C)
Class C {
}
答案 0 :(得分:2)
您需要声明制作人。
@Produces @Ii(Ii.type.B)
public void produceB {
return Ii.type.B;
}
@Produces @Ii(Ii.type.C)
public void produceC {
return Ii.type.C;
}
为了您的活动,您需要注释应该使用@Observes
创建活动的参数。在下面的代码中,您可以看到如何获取已触发事件的列表。
@Inject
private List<Event> events;