使用CDI将参数传递给bean

时间:2013-10-14 20:14:57

标签: java-ee cdi

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

1 个答案:

答案 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;