2016-10-18 2 views
0

У меня есть фасоль (EventSender), которая имеет набор впрыскиваемых бобов (Listener) следующим образом. Весна, похоже, не вводит оба компонента-приемника в набор (иногда нет). Есть ли способ гарантировать, что все компоненты, реализующие интерфейс, вводятся?Как гарантировать инъекцию набора одинаковых бобов?

public interface Listener {  
    void handleEvent(EventType event)  
} 

@Named  
public class EventSender {  
    @Inject  
    Set<Listener> listeners;  

    public void SendEvent (EventType event) {  
     for(Listener listener: listeners){  
      listener.handleEvent(event);  
     }  
    }  
}  

@Named 
public class Listener1 implements Listener { 
    @Override 
    public void handleEvent(EventType event){ 
     //handle this event 
    } 
} 

@Named 
public class Listener2 implements Listener { 
    @Override 
    public void handleEvent(EventType event){ 
     //handle this event 
    } 
} 
+0

Может быть, вы можете использовать пружину '@ Autowire' (или' @ Required', чтобы убедиться, что инъецированное) и аннотация @ @ Component. '@ Inject' не дает никакой гарантии, что зависимость будет введена –

ответ

0

Вы должны будете использовать @Produce

@Qualifier 
@Retention(RetentionPolicy.RUNTIME) 
@Target({FIELD, METHOD, TYPE}) 
public @interface ListnerProducer { 
} 



public class ListenerFactory { 

@Produces 
@ListnerProducer 
public Set<Listner> getListners(){ 
    //return your listners 
} 

} 

затем

@Inject 
@ListnerProducer 
Set<Listner> listeners;