0

我是 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; 
  }
}

我使用限定符来避免歧义,但可以弄清楚如何从客户端传递参数。我需要使用生产者将列表和字符串分别注入 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 {
}
4

1 回答 1

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;
于 2013-10-14T20:31:28.337 回答