2017-09-08 4 views
0

Ich möchte die Bohnen, die die var args Argumente für meinen Konstruktor sind, automatisch verdrahten.Var args Autowire

Kann ich das tun, wenn ja, wie kann ich erreichen?

Hier ist der Code Ich versuche:

Public class ServiceImpl implements Service{ 
    private Set<Rules> rules = new HashSet<Rules>(); 

    public ServiceImpl(Rules... args) { 
     for (Rules r : args) { 
      rules.add(r); 
     } 
    } 
    //... 
} 

Ich versuche, in spring-config.xml wie unten zu injizieren:

<bean id = "check" class="ServiceImpl"> 
    <constructor-arg ref="notEmpty"></constructor-arg> 
    <constructor-arg ref="check"></constructor-arg> 
</bean> 

Gibt es eine Möglichkeit, dass ich erreichen Sie dies mit Anmerkungen und ohne constructor args hier zu passieren.

Antwort

0

Ja, mit Anmerkungen Sie @Autowired an den Konstruktor und der IoC-Container wird Draht in allen Regeln Instanzen hinzufügen können, die im Rahmen registriert sind:

@Component 
public class ServiceImpl implements Service{ 
private Set<Rules> rules = new HashSet<Rules>(); 

@Autowired 
public ServiceImpl(Rules... args) { 
    for (Rules r : args) { 
     rules.add(r); 
    } 
    } 

} 
+0

Ich erhalte Ausnahme keine qualifizierten Bohne, hier meine Feder-config.xml ist \t \t \t \t \t < Bohne \t \t class = "org.springframework.web.servlet.view.InternalResourceViewResolver"> \t \t \t \t \t – user8579908

+0

das bedeutet, dass der Kontext keine Rules-Implementierungen finden kann. Sie müssen sicherstellen, dass Sie mindestens eine konkrete Implementierung von Regeln in Ihrem Anwendungskontext haben (etwas, das in den Paketen, die Sie scannen, mit @Component versehen ist). – Chris

+0

danke Das hat funktioniert – user8579908