[SPRING] Spring 구성 클래스에서 @Bean 메소드에 @Autowired가 필요하지 않은 이유는 무엇입니까?
SPRINGSpring 구성 클래스에서 @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.@Autowire는 외부 세계가 여러분의 응용 프로그램 인 "외부 세계"에 컨텍스트에서 콩을 주입하도록합니다. @Configuration 클래스를 사용하면 "컨텍스트 월드"내에 있으므로 명시 적으로 autowire (컨텍스트에서 bean 검색) 할 필요가 없습니다.
@Autowire는 외부 세계가 여러분의 응용 프로그램 인 "외부 세계"에 컨텍스트에서 콩을 주입하도록합니다. @Configuration 클래스를 사용하면 "컨텍스트 월드"내에 있으므로 명시 적으로 autowire (컨텍스트에서 bean 검색) 할 필요가 없습니다.
주어진 인스턴스에서 메소드에 액세스 할 때와 같은 비유를 생각해보십시오. 인스턴스 범위 내에있는 동안 인스턴스 메소드에 액세스 할 필요는 없지만 외부에서는 인스턴스 참조를 사용해야합니다.
편집하다
@Configuration 클래스를 작성하면 IOC에서 작성하는 bean에 대한 메타 데이터를 지정하게됩니다.
반면에 @Autowire 주석은 응용 프로그램에서 메타 데이터가 아닌 초기화 된 빈을 삽입 할 수있게합니다. 따라서 Configuration 클래스 내부에서 Bean을 사용하지 않으므로 명시 적 주입이 필요 없습니다.
-
==============================
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가 필요할 때 사용할 수있다.
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
'SPRING' 카테고리의 다른 글
[SPRING] LocalDateTime에서 'T'를 제거 할 수 없습니다. (0) | 2019.07.16 |
---|---|
[SPRING] ClassPathResource가 클래스 경로를 가져 오지 않습니다. (0) | 2019.07.16 |
[SPRING] @PropertySource를 사용한 Spring 속성 설정 (0) | 2019.07.16 |
[SPRING] Spring Framework에서 setter가 어떻게 작동합니까? (0) | 2019.07.16 |
[SPRING] Spring 어노테이션에서 정적 변수 사용하기 (0) | 2019.07.16 |