Как создать Bean, если у его класса конструктор с параметрами
Есть классы:
public class Car {
private String name;
private Engine engine;
public Car(Engine engine) {
this.engine = engine;
}
}
public class Engine {
private int volume;
}
Есть spring config:
@Configuration
public class Config {
@Bean
public Engine engine() {
return new Engine();
}
@Bean
public Car car() {
return new Car(engine());
}
}
Есть приложение:
public class App {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(Config.class);
Car lada = context.getBean("car", Car.class);
System.out.println(lada);
}
}
Это работает, но как задать параметр для инициализации? Если я хочу, чтобы при получении бина(car) из контекса, у класса Car указывалось имя(поле name). Есть ли возможность задать значения для полей вытягиваемого из контекста класса во время вызова getBean-метода?
Ответы (1 шт):
Автор решения: George_A
→ Ссылка
Добавьте в car
public Engine getEngine() {
return engine;
}
Опубликуйте в registry некий CarProvider, который имеет метод getCar(Engine parameter)
@Component
public CardProvider {
private final Map<Engine, Car> cars = Maps.newHashMap();
@Autowired(required = false)
public void setCars(Collection<Car> cars) {
cars.forEach(car -> this.cars.put(car.getEngine(), car));
}
@Nullable
public Car getCar(Engine param) {
return cars.get(param);
}
}