@Autowired
를 사용하는 경우 클래스가 인스턴스화될 때 의존성이 해결되어야 하며, 이로 인해 Bean 이 lazy loading 되지 않고 초기에 인스턴스화 되거나, 찾을 수 없는 Bean 값을 바라보게 되는 문제를 발생시킬 수 있습니다.
이러한 까다로운 문제를 피하고 스프링 컨텍스트의 로드 방식을 최적화하려면, 의존성은 가능한 늦게 요청되어야합니다.
즉, 단일 @Bean
메소드에서만 사용되는 의존성에 대해 필드 주입 대신 파라미터 주입을 사용해야합니다.
규칙을 어긴 코드
@Configuration
public class FooConfiguration {
@Autowired
private DataSource dataSource; // 규칙을 어긴 코드
@Bean
public MyService myService() {
return new MyService(this.dataSource);
}
}
규칙을 준수한 해결책
@Configuration
public class FooConfiguration {
@Bean
public MyService myService(DataSource dataSource) {
return new MyService(dataSource);
}
}
예외
Spring 프레임워크에 의해 자동으로 호출되는 것과 반대로 다른 메소드에 의해 직접 호출되는 메소드에서 사용되는 필드는 이 규칙이 무시되므로, 호출자가 종속성을 자체적으로 제공할 필요가 없습니다.
If you like SONARKUBE, don’t forget to give me a star.