팩토리 메서드 주입은 "@Configuration" 클래스에서 사용해야 합니다.

 

@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. :star2:

원문으로 바로가기

Star This Project