2015-05-29 13 views
9

injizieren Ich verwende Spring Boot Annotation-Konfiguration. Ich habe eine Klasse, deren Konstruktor 2 Parameter akzeptiert (String, eine andere Klasse).Parameter in Konstruktor durch Annotation in Spring

Fruit.java

public class Fruit { 
    public Fruit(String FruitType, Apple apple) { 
      this.FruitType = FruitType; 
      this.apple = apple; 
     } 
} 

Apple.java

public class Apple { 

} 

Ich habe eine Klasse, die die obige Klasse autowire muss durch Parameter an den Konstruktor ("Eisen Fruit", Apple-Klasse) Einspritzen

Cook.java

public class Cook { 

    @Autowired 
    Fruit applefruit; 
} 

Die Notwendigkeit Koch Klasse Fruit Klasse mit Parametern ("Eisen Fruit", Apple-Klasse)

Die XML-Konfiguration sieht wie folgt autowire:

<bean id="redapple" class="Apple" /> 
<bean id="greenapple" class="Apple" /> 
<bean name="appleCook" class="Cook"> 
      <constructor-arg index="0" value="iron Fruit"/> 
      <constructor-arg index="1" ref="redapple"/> 
</bean> 
<bean name="appleCook2" class="Cook"> 
      <constructor-arg index="0" value="iron Fruit"/> 
      <constructor-arg index="1" ref="greenapple"/> 
</bean> 

Wie erreicht man es mit Annotation Konfiguration nur?

Antwort

9

von Apple muss eine feder Managed Bean sein:

@Component 
public class Apple{ 

} 

Obst auch:

@Component 
public class Fruit { 

    @Autowired 
    public Fruit(
     @Value("iron Fruit") String FruitType, 
     Apple apple 
     ) { 
      this.FruitType = FruitType; 
      this.apple = apple; 
     } 
} 

Beachten Sie die Verwendung von @Autowired und @Value Anmerkungen.

Cook sollte auch @Component haben.

aktualisieren

Oder Sie @Configuration und @Bean Anmerkungen verwenden:

@Configuration 
public class Config { 

    @Bean(name = "redapple") 
    public Apple redApple() { 
     return new Apple(); 
    } 

    @Bean(name = "greeapple") 
    public Apple greenApple() { 
     retturn new Apple(); 
    } 

    @Bean(name = "appleCook") 
    public Cook appleCook() { 
     return new Cook("iron Fruit", redApple()); 
    } 
    ... 
} 
+0

Ich habe meine Frage ein wenig verbessert. Wenn ich verschiedene Apfel (Redapple oder grüner Apfel) injizieren muss, was zu tun ist. Verschiedene Bohnen mit derselben Klasse. die Obst-Klasse Konstrukteur Parameter müssen mit Redapple oder greenapple – vishnumanohar

+0

@vishnumanohar meine Antwort aktualisiert werden. – medvedev1088

+0

Was ist, wenn Apple nicht von der Feder verwaltet wird und aus einer Bibliothek von Drittanbietern stammt, die nicht geändert werden kann? – Claus

Verwandte Themen