web-dev-qa-db-fra.com

Injection de paramètres au constructeur via une annotation au printemps

J'utilise la configuration d'annotation Spring Boot. J'ai une classe dont le constructeur accepte 2 paramètres (chaîne, une autre classe).

Fruit.Java

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

Apple.Java

public class Apple {

}

J'ai une classe qui doit câbler automatiquement la classe ci-dessus en injectant des paramètres au constructeur ("Iron Fruit", classe Apple)

Cook.Java

public class Cook {

    @Autowired
    Fruit applefruit;
}

La classe de cuisinier doit câbler automatiquement la classe Fruit avec des paramètres ("Iron Fruit", classe Apple)

La configuration XML ressemble à ceci:

<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>

Comment y parvenir en utilisant uniquement la configuration d'annotation?

14
vishnumanohar

Apple doit être un haricot géré par le printemps:

@Component
public class Apple{

}

Fruits aussi:

@Component
public class Fruit {

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

Notez l'utilisation de @Autowired et @Value annotations.

Le cuisinier devrait avoir @Component aussi.

Mise à jour

Ou vous pouvez utiliser @Configuration et @Bean annotations:

@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());
    }
    ...
}
14
medvedev1088