복붙노트

[SPRING] Spring 구성 클래스에서 @Bean 메소드에 @Autowired가 필요하지 않은 이유는 무엇입니까?

SPRING

Spring 구성 클래스에서 @Bean 메소드에 @Autowired가 필요하지 않은 이유는 무엇입니까?

왜 이것이 작동합니까?

@Configuration
public class MyConfig {

  @Bean
  public A getA() {
    return new A();
  }

  @Bean                 <-- Shouldn't I need @Autowired here?
  public B getB(A a) {
    return new B(a);
  }  
}

감사!

해결법

  1. ==============================

    1.@Autowire는 외부 세계가 여러분의 응용 프로그램 인 "외부 세계"에 컨텍스트에서 콩을 주입하도록합니다. @Configuration 클래스를 사용하면 "컨텍스트 월드"내에 있으므로 명시 적으로 autowire (컨텍스트에서 bean 검색) 할 필요가 없습니다.

    @Autowire는 외부 세계가 여러분의 응용 프로그램 인 "외부 세계"에 컨텍스트에서 콩을 주입하도록합니다. @Configuration 클래스를 사용하면 "컨텍스트 월드"내에 있으므로 명시 적으로 autowire (컨텍스트에서 bean 검색) 할 필요가 없습니다.

    주어진 인스턴스에서 메소드에 액세스 할 때와 같은 비유를 생각해보십시오. 인스턴스 범위 내에있는 동안 인스턴스 메소드에 액세스 할 필요는 없지만 외부에서는 인스턴스 참조를 사용해야합니다.

    편집하다

    @Configuration 클래스를 작성하면 IOC에서 작성하는 bean에 대한 메타 데이터를 지정하게됩니다.

    반면에 @Autowire 주석은 응용 프로그램에서 메타 데이터가 아닌 초기화 된 빈을 삽입 할 수있게합니다. 따라서 Configuration 클래스 내부에서 Bean을 사용하지 않으므로 명시 적 주입이 필요 없습니다.

  2. ==============================

    2.@Configuration 어노테이션이있는 클래스는 컨텍스트에 대한 Bean을 정의하는 곳입니다. 하지만 스프링 빈은 자체 의존성을 정의해야한다. 네 개의 사례 B 클래스는 클래스 정의에서 자신의 종속성을 정의해야합니다. 예를 들어, B 클래스가 A 클래스에 의존하는 경우 아래와 같아야합니다.

    @Configuration 어노테이션이있는 클래스는 컨텍스트에 대한 Bean을 정의하는 곳입니다. 하지만 스프링 빈은 자체 의존성을 정의해야한다. 네 개의 사례 B 클래스는 클래스 정의에서 자신의 종속성을 정의해야합니다. 예를 들어, B 클래스가 A 클래스에 의존하는 경우 아래와 같아야합니다.

    public class B
    {
        @Autowired
        A aInstance;
    
        public A getA()
        {
            return aInstance;
        }
    
        public void setA(A a)
        {
            this.aInstance =  a;
        }
    }
    

    위의 경우 스프링이 컨텍스트를 구축하는 동안 유형이 A 인 Bean을 찾는다. 또한 컨피규레이션 클래스에서 Bean으로 정의되고 실행시 B로 Autowires되어 B가 필요할 때 사용할 수있다.

  3. from https://stackoverflow.com/questions/32078600/why-do-i-not-need-autowired-on-bean-methods-in-a-spring-configuration-class by cc-by-sa and MIT license