[SPRING] Spring 3에서 @Component와 @Configuration의 차이점
SPRINGSpring 3에서 @Component와 @Configuration의 차이점
Spring 3 (@Component 및 @Configuration)에서 제공하는 두 가지 주석을 발견했습니다. 나는 이것들 사이에 약간 혼란 스럽다. 다음은 @Component에 대한 내용입니다.
그래서 @Configuration의 사용법이 궁금하다. @Controller가 스프링 구성 xml 파일에서 선언 할 필요없이 내 빈을 등록한다면
해결법
-
==============================
1.@Configuration은 Spring 3에서 소개 된 Java 기반 구성 메커니즘의 핵심입니다. 이는 XML 기반 구성의 대안을 제공합니다.
@Configuration은 Spring 3에서 소개 된 Java 기반 구성 메커니즘의 핵심입니다. 이는 XML 기반 구성의 대안을 제공합니다.
따라서 다음 2 개의 스 니펫은 동일합니다.
<beans ...> <context:component-scan base-package="my.base.package"/> ... other configuration ... </beans>
과:
@Configuration @ComponentScan(basePackages = "my.base.package") public class RootConfig { ... other configuration ... }
두 경우 모두 Spring은 @Component로 주석 된 클래스 나 @Service와 같이 @Component로 메타 주석이 첨부 된 다른 주석 중 하나를 my.base.package 이하에서 검색합니다.
-
==============================
2.도서 프로 봄 통합에서
도서 프로 봄 통합에서
@Configuration 클래스는 @Bean으로 주석 된 메소드가 팩토리 빈에 사용된다는 점을 제외하면 일반 @Components 클래스와 같습니다. @Bean 주석이 달린 메소드를 사용하는 @Component는 스코프가 존중되지 않고 @Bean 메소드가 다시 호출되므로 (재생중인 캐싱이 없음), CGLIB가 필요하지만 @Configuration이 선호된다는 점을 제외하고는 동일한 방식으로 작동합니다
-
==============================
3.전체 예제와의 차이점은 다음과 같습니다.
전체 예제와의 차이점은 다음과 같습니다.
//@Configuration or @Component public static class Config { @Bean public A a() { return new A(); } //**please see a() method called inside b() method** @Bean public B b() { return new B(a()); } }
1) 여기서 a () 메소드와 b () 메소드보다 @configuration으로 주석이 붙은 Config 클래스는 두 번 호출됩니다.
2) 여기서 @component로 주석 된 Config 클래스는 a () 메소드보다 한 번 호출되지만 b () 메소드는 두 번 호출됩니다.
(2)의 문제점 : @compenent 주석에 문제가 있음을 알았 기 때문에. 이 두 번째 구성 (2)은 스프링이 A의 싱글 톤 빈을 생성하지만 B가 스프링 컨텍스트 제어 밖에있는 A의 다른 인스턴스를 가져 오기 때문에 완전히 잘못된 것입니다.
해결책 : - @automired 어노테이션과 @component 어노테이션을 Config 클래스 내에서 사용할 수 있습니다.
@Component public static class Config { @Autowired A a; @Bean public A a() { return new A(); } @Bean public B b() { return new B(a); } }
-
==============================
4.이것은 오래되었지만 예를 들어 JavaBoy와 Vijay의 답변에 대해 자세히 설명하고 있지만 다음과 같습니다.
이것은 오래되었지만 예를 들어 JavaBoy와 Vijay의 답변에 대해 자세히 설명하고 있지만 다음과 같습니다.
@Configuration public class JavaConfig { @Bean public A getA() { return new A(); } } @Component @ComponentScan(basePackages="spring.example") public class Main() { @Bean public B getB() { return new B(); } @Autowired JavaConfig config; public static void main(String[]a) { Main m = new AnnotationConfigApplicationContext(Main.class) .getBean(Main.class); /* Different bean returned everytime on calling Main.getB() */ System.out.println(m.getB()); System.out.println(m.getB()); /* Same bean returned everytime on calling JavaConfig.getA() */ System.out.println(m.config.getA()); System.out.println(m.config.getA()); } }
from https://stackoverflow.com/questions/11903053/difference-between-component-and-configuration-in-spring-3 by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 봄, 최대 절전 모드 및 선언적 트랜잭션 구현 : 활성 트랜잭션이 없음 (0) | 2019.01.12 |
---|---|
[SPRING] DB로부터의 Spring PropertyPlaceholderConfigurer로드 (0) | 2019.01.12 |
[SPRING] WebMvcConfigurationSupport를 확장하고 WebMvcAutoConfiguration을 사용할 수 있습니까? (0) | 2019.01.12 |
[SPRING] spring-data-mongo - 선택적 쿼리 매개 변수? (0) | 2019.01.12 |
[SPRING] HibernateValidator를 사용하여 크로스 필드 유효성 검사가 오류 메시지를 표시하지 않습니다. (0) | 2019.01.12 |