I am using Spring Boot annotation configuration. I have a class whose constructor accepts 2 parameters (string, another class).
Fruit.java
public class Fruit {
public Fruit(String FruitType, Apple apple) {
this.FruitType = FruitType;
this.apple = apple;
}
}
Apple.java
public class Apple {
}
I have a class that needs to autowire the above class by injecting parameters to the constructor("iron Fruit",Apple class)
Cook.java
public class Cook {
@Autowired
Fruit applefruit;
}
The cook class need to autowire Fruit class with parameters("iron Fruit",Apple class)
The XML configuration looks like this:
<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>
How to achieve it using annotation configuration only?
Apple must be a spring-managed bean:
@Component
public class Apple{
}
Fruit as well:
@Component
public class Fruit {
@Autowired
public Fruit(
@Value("iron Fruit") String FruitType,
Apple apple
) {
this.FruitType = FruitType;
this.apple = apple;
}
}
Note the usage of @Autowired
and @Value
annotations.
Cook should have @Component
too.
Update
Or you could use @Configuration
and @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());
}
...
}