스프링이 스프링 컨텍스트를 만들고 콩을 인스턴스화 할 때 기본 생성자, 즉 매개 변수없이 생성자가 필요하다는 것을 알아야합니다. 확실히 간단히 말해서 휠을 공급할 것인지 알 수 없습니다.
또한 가상 예약 된 get/set 메서드를 개체 이름으로 사용하면 불만이 생길 수 있습니다. 한정자 주석에 관계없이 Car 클래스의 getCar 객체를 생성합니다.
getCar를 팩토리 메서드로 만들려고하는 것 같습니다. 내가하는 일이 아닌 경우에 대비하여 큰 설명을 쓰지 않을 것입니다. 그러나 그렇다면 패턴에 약간의 작업이 필요합니다.
편집 : 귀하의 의견을 아래에서 나는 정말 당신이 컨텍스트를 만들 때 콩을 인스턴스화 싶지 않아요. Cars와 Wheels를 사용할 수있는 일반적인 Spring Aware 빈을 원한다고 들리는 것 같습니다. 이 같은.
@Component
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
class Wheel {
... wheel stuff
}
@Component
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
class Car {
... car stuff
}
@Component
class Dealership extends ApplicationContextAware {
@Autowired
ApplicationContext applicationContext;
... bunch of dealership code
Wheel wheel = (Wheel) applicationContext.getBean("Wheel");
Car car = (Car) applicationContext.getBean("Car");
car.setWheel(wheel);
... profit
컨텍스트 초기화 중에 글로벌 싱글 톤 카에 주입되는 휠이라는 글로벌 싱글 톤을 찾는 것처럼 들리지 않습니다.
위의 이유 때문에 위의 SCOPE_PROTOTYPE 주석을 추가했습니다. 일반적으로 Spring은 객체를 인스턴스화하고 호출 할 때 해당 객체를 계속 손상시킵니다. 이것은 대부분의 경우 잘 작동합니다. 그러나 객체가 상태를 저장하기 시작하거나 물론 멀티 스레드 된 경우에는 작동하지 않습니다.
하지만 봄은 알아낼 수 없습니다. 따라서 각 getBean 호출에 대해 고유 한 객체를 인스턴스화하려면 @Scope 주석을 추가해야합니다.
희망이 있습니다.
아무런 인수없이 생성자가 필요합니다. – Jens