2013-10-14 4 views
0

Я новичок в CDI. Я не могу понять, как преобразовать следующий код с помощью CDI.Передача параметра bean с использованием 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; 
    } 
} 

Я использовал Квалификационные, чтобы избежать двусмысленностей, но могу понять, как передать параметры из client.Do мне нужно использовать производитель, чтобы ввести список и строку в классе 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 { 
} 

ответ

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; 
+0

Но как класс B получит список ? Произведения просто вернут новый B(). – Paneri

+0

Я обновил свой ответ кодом, который позволяет вам получить доступ к списку событий. –

Смежные вопросы