[SPRING] 차이 <컨텍스트 : 주석 - 구성> 및 <컨텍스트 : 성분 주사>
SPRING차이 <컨텍스트 : 주석 - 구성> 및 <컨텍스트 : 성분 주사>
<: 구성 요소 스캔 문맥> : 나는 봄 3을 배우고 난 <컨텍스트 주석 - 설정> 뒤에있는 기능 파악하지 않는 것 등을.
내가 읽은 바로는 그들은뿐만 아니라 나는 그들이 같은 콩 포스트 프로세서 클래스를 등록 읽은 것과 다른 주석 (@Required, @Component 대 @Autowired 등, @Repository, @Service 등)을 처리 할 것으로 보인다.
<: 구성 요소 스캔 컨텍스트> 더 저를 혼란스럽게하기에 주석 - 설정 속성이 있습니다.
누군가가 이러한 태그에 도움이 되거 수 있습니까? 무엇 하나가 다른로 대체되고, 무엇이 달라, 유사, 그들은 서로를 완료, 나는 그들 중 하나, 둘 필요합니까?
해결법
-
==============================
1.<컨텍스트 : 주석 - 설정> (그들은 XML 또는 패키지 검사에 의해 정의 된 경우에 상관없이) 이미 애플리케이션 컨텍스트에 등록 된 콩 주석을 활성화하는 데 사용됩니다.
<컨텍스트 : 주석 - 설정> (그들은 XML 또는 패키지 검사에 의해 정의 된 경우에 상관없이) 이미 애플리케이션 컨텍스트에 등록 된 콩 주석을 활성화하는 데 사용됩니다.
<컨텍스트 : 구성 요소 검사>도 할 수있는 <컨텍스트 : 주석 - 설정> 않고 <컨텍스트 : 구성 요소 검사> 또한 애플리케이션 컨텍스트 내에서 콩을 찾아 등록 패키지를 검색합니다.
나는 차이 / 유사성을 보여주기 위해 몇 가지 예를 사용합니다.
B 형 및 C와 A, B 및 C의 세 콩의 기본 설정으로 시작하자 A. 주입 되
package com.xxx; public class B { public B() { System.out.println("creating bean B: " + this); } } package com.xxx; public class C { public C() { System.out.println("creating bean C: " + this); } } package com.yyy; import com.xxx.B; import com.xxx.C; public class A { private B bbb; private C ccc; public A() { System.out.println("creating bean A: " + this); } public void setBbb(B bbb) { System.out.println("setting A.bbb with " + bbb); this.bbb = bbb; } public void setCcc(C ccc) { System.out.println("setting A.ccc with " + ccc); this.ccc = ccc; } }
다음 XML 구성 :
<bean id="bBean" class="com.xxx.B" /> <bean id="cBean" class="com.xxx.C" /> <bean id="aBean" class="com.yyy.A"> <property name="bbb" ref="bBean" /> <property name="ccc" ref="cBean" /> </bean>
컨텍스트를로드하는 것은 다음과 같은 출력을 생성합니다 :
creating bean B: com.xxx.B@c2ff5 creating bean C: com.xxx.C@1e8a1f6 creating bean A: com.yyy.A@1e152c5 setting A.bbb with com.xxx.B@c2ff5 setting A.ccc with com.xxx.C@1e8a1f6
OK,이 예상 출력됩니다. 그러나 이것은 "이전 스타일"봄입니다. 그래서 XML을 단순화하기 위해 사람들을 사용할 수 있습니다 이제 우리는 주석을 가지고있다.
첫째,과 같이 콩 A의 BBB 및 CCC 속성을 autowire하기 수 있습니다 :
package com.yyy; import org.springframework.beans.factory.annotation.Autowired; import com.xxx.B; import com.xxx.C; public class A { private B bbb; private C ccc; public A() { System.out.println("creating bean A: " + this); } @Autowired public void setBbb(B bbb) { System.out.println("setting A.bbb with " + bbb); this.bbb = bbb; } @Autowired public void setCcc(C ccc) { System.out.println("setting A.ccc with " + ccc); this.ccc = ccc; } }
이 날은 XML에서 다음 행을 제거 할 수 있습니다 :
<property name="bbb" ref="bBean" /> <property name="ccc" ref="cBean" />
내 XML 이제이 단순화된다 :
<bean id="bBean" class="com.xxx.B" /> <bean id="cBean" class="com.xxx.C" /> <bean id="aBean" class="com.yyy.A" />
내가 컨텍스트를로드 할 때 나는 다음과 같은 출력을 얻을 :
creating bean B: com.xxx.B@5e5a50 creating bean C: com.xxx.C@54a328 creating bean A: com.yyy.A@a3d4cf
OK, 이것은 잘못입니다! 어떻게 된 거예요? 왜 속성은 autowire가되지 않습니다?
음, 주석 좋은 기능이지만 그 자체로 그들은 전혀 아무것도하지 않습니다. 그들은 단지 물건을 주석을 달 수 있습니다. 당신은 주석을 찾기 위해 처리 도구가 필요하고 그들과 함께 뭔가.
<컨텍스트 : 주석 - 설정> 구출. 이것은 그 자체가 정의 된 동일한 애플리케이션 컨텍스트에 정의 된 콩에 발견 주석에 대한 작업을 활성화합니다.
나는이 내 XML을 변경하는 경우 :
<context:annotation-config /> <bean id="bBean" class="com.xxx.B" /> <bean id="cBean" class="com.xxx.C" /> <bean id="aBean" class="com.yyy.A" />
나는 응용 프로그램 컨텍스트를로드 할 때 적절한 결과를 얻을 :
creating bean B: com.xxx.B@15663a2 creating bean C: com.xxx.C@cd5f8b creating bean A: com.yyy.A@157aa53 setting A.bbb with com.xxx.B@15663a2 setting A.ccc with com.xxx.C@cd5f8b
OK,이 좋은,하지만 난 XML에서 두 개의 행을 제거하고 하나를 추가했습니다. 그것은 매우 큰 차이가 아니다. 주석 아이디어는이 XML을 제거 해야하는 것입니다.
그래서이 XML 정의를 제거하고 주석으로 모두 대체 할 수 :
package com.xxx; import org.springframework.stereotype.Component; @Component public class B { public B() { System.out.println("creating bean B: " + this); } } package com.xxx; import org.springframework.stereotype.Component; @Component public class C { public C() { System.out.println("creating bean C: " + this); } } package com.yyy; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.xxx.B; import com.xxx.C; @Component public class A { private B bbb; private C ccc; public A() { System.out.println("creating bean A: " + this); } @Autowired public void setBbb(B bbb) { System.out.println("setting A.bbb with " + bbb); this.bbb = bbb; } @Autowired public void setCcc(C ccc) { System.out.println("setting A.ccc with " + ccc); this.ccc = ccc; } }
XML에서 우리는이를 유지하는 동안 :
<context:annotation-config />
우리는 컨텍스트를로드하고 결과는 ... 아무것도 없다. 어떤 콩이 생성되지 않으며, 어떠한 콩 autowire가되지 않습니다. 아무것도!
내가 첫 번째 단락에서 말한대로 그 때문이다의 <컨텍스트 : 주석-설정은 />은 응용 프로그램의 컨텍스트 내에서 등록 된 콩에서 작동합니다. <: 주석 - 설정 / 컨텍스트>에는 "대상"에 작업이 없습니다 나는 세 가지 콩의 XML 구성을 제거하기 때문에 더 만들어 콩 및도 없다.
에 작동하는 "대상"에 대한 패키지를 스캔 할 수 있습니다 : <구성 요소 스캔 상황>하지만 그에게 문제가되지 않습니다. 의는 다음 항목으로 XML 설정의 내용을 변경할 수 있습니다 :
<context:component-scan base-package="com.xxx" />
내가 컨텍스트를로드 할 때 나는 다음과 같은 출력을 얻을 :
creating bean B: com.xxx.B@1be0f0a creating bean C: com.xxx.C@80d1ff
흠 ... 뭔가가 없습니다. 왜?
당신이 클래스에 closelly 보면, 클래스 A는 패키지 com.yyy을 가지고 있지만이에서 지정한 <컨텍스트 : 구성 요소가 스캔>이 완전히 내 클래스를 놓친 만 B와 C를 집어 있도록 패키지 com.xxx을 사용할 com.xxx 패키지에 있습니다.
이 문제를 해결하려면, 나는이 다른 패키지도 추가 :
<context:component-scan base-package="com.xxx,com.yyy" />
이제 우리는 예상 된 결과를 얻을 수 :
creating bean B: com.xxx.B@cd5f8b creating bean C: com.xxx.C@15ac3c9 creating bean A: com.yyy.A@ec4a87 setting A.bbb with com.xxx.B@cd5f8b setting A.ccc with com.xxx.C@15ac3c9
그리고 그게 다야! 이제 더 이상 XML 정의가없는, 당신은 주석을 가지고있다.
최종 예를 들어, 우리는 컨텍스트를로드 한 후 무엇을 얻을 것이다,하여 XML에 다음과 같은 주석 클래스 A, B 및 C를 유지하고 추가?
<context:component-scan base-package="com.xxx" /> <bean id="aBean" class="com.yyy.A" />
우리는 여전히 올바른 결과를 얻을 :
creating bean B: com.xxx.B@157aa53 creating bean C: com.xxx.C@ec4a87 creating bean A: com.yyy.A@1d64c37 setting A.bbb with com.xxx.B@157aa53 setting A.ccc with com.xxx.C@ec4a87
등록 된 모든 콩 : <구성 요소 스캔 컨텍스트> 클래스 A의 콩이 스캔에 의해 얻을 수없는 경우에도, 처리 도구는 여전히 적용된다 응용 프로그램 컨텍스트에서, 심지어하는 수동으로 XML에 등록되었습니다.
우리는 다음과 같은 XML이있는 경우 우리가 지정한 있기 때문에, 우리는 콩을 무엇을 중복 얻을 것이다 모두 <컨텍스트 : 주석 - 설정 />와 <컨텍스트 : 구성 요소 검사>?
<context:annotation-config /> <context:component-scan base-package="com.xxx" /> <bean id="aBean" class="com.yyy.A" />
아니, 중복, 우리는 다시 예상 된 결과를 얻을 :
creating bean B: com.xxx.B@157aa53 creating bean C: com.xxx.C@ec4a87 creating bean A: com.yyy.A@1d64c37 setting A.bbb with com.xxx.B@157aa53 setting A.ccc with com.xxx.C@ec4a87
(<: 주석 - 설정 / 컨텍스트>이 경우 생략 <컨텍스트 : 구성 요소 검사>가 될 수 지정)하지만, 봄은 한 번만 실행을 담당 모두 태그 동일한 처리 도구를 등록하기 때문입니다.
당신이 처리 도구를 직접 여러 번 등록 할 경우에도, 봄은 여전히 자신의 마법을 한 번만 할 수 있는지 확인합니다; 이 XML :
<context:annotation-config /> <context:component-scan base-package="com.xxx" /> <bean id="aBean" class="com.yyy.A" /> <bean id="bla" class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" /> <bean id="bla1" class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" /> <bean id="bla2" class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" /> <bean id="bla3" class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" />
여전히 다음과 같은 결과를 생성합니다 :
creating bean B: com.xxx.B@157aa53 creating bean C: com.xxx.C@ec4a87 creating bean A: com.yyy.A@25d2b2 setting A.bbb with com.xxx.B@157aa53 setting A.ccc with com.xxx.C@ec4a87
OK, 그 약 그것을 강간.
당신이 방법을 이해하는 데 필요한 모든 나는 @Tomasz Nurkiewicz 및 @Sean 패트릭 플로이드의 응답과 함께이 정보를 희망이다 <컨텍스트 : 주석 - 설정>와 <컨텍스트 : 구성 요소 검사> 일.
-
==============================
2.나는 주석이있는 선언에 의해 선택이되는이 좋은 요약을 발견했다. 를 연구함으로써 그 <문맥을 : 구성 요소 스캔 />은 찾을 인식 주석의 수퍼 인식 <컨텍스트 : 주석 - 설정을 />, 즉 :
나는 주석이있는 선언에 의해 선택이되는이 좋은 요약을 발견했다. 를 연구함으로써 그 <문맥을 : 구성 요소 스캔 />은 찾을 인식 주석의 수퍼 인식 <컨텍스트 : 주석 - 설정을 />, 즉 :
당신이 볼 수 있듯이 <컨텍스트 : 구성 요소 스캔 /> 논리적으로 <컨텍스트 : 주석 - 설정 /> 확장 CLASSPATH 구성 요소 검사 및 자바 @Configuration 기능을 갖춘.
-
==============================
3.Spring은 두 가지를 수행 할 수 있습니다 :
Spring은 두 가지를 수행 할 수 있습니다 :
1. Autowiring은 보통 applicationContext.xml에서 당신은 콩을 정의하고 다른 콩 사용하여 유선된다 생성자 또는 setter 메소드. 당신은 XML 또는 주석을 사용하여 콩을 연결할 수 있습니다. 경우에 당신은 당신이 주석을 활성화해야, 주석을 사용하면 추가해야 <컨텍스트 : 주석 - 설정 /> applicationContext.xml이다. 이것은을 단순화 applicationContext.xml에서 태그의 구조는 수동 와이어 콩 (생성자 또는 세터) 필요가 없습니다 때문입니다. 당신은 @Autowire 주석을 사용할 수 있으며, 콩 종류에 따라 유선됩니다.
수동 XML 구성을 탈출 일보 전진이다
2. 자동 검색 자동 검색은 한 단계 더 나아가, 당신도 applicationContext.xml에 <빈> 태그를 추가 너무 필요가 없습니다 의미에서 XML을 단순화된다. 당신은 다음과 같은 주석 중 하나를 사용하여 특정 콩을 표시하고 봄이 자동으로 봄의 용기에 표시된 콩 종속를 연결합니다. 주석은 다음과 같습니다 : @Controller, @Service, @Component, @Repository. <컨텍스트 : 구성 요소 검사>를 사용하여 기본 패키지 및 포인팅, 봄 Spring 컨테이너에 구성 요소를 자동으로 발견하고 와이어 것입니다.
결론적으로 :
-
==============================
4.<컨텍스트 : 주석 - 설정>은 XML 또는 구성 요소 검사를 통해 정의되어 있는지, 콩에 여러 가지 주석을 활성화합니다.
<컨텍스트 : 주석 - 설정>은 XML 또는 구성 요소 검사를 통해 정의되어 있는지, 콩에 여러 가지 주석을 활성화합니다.
<컨텍스트 : 구성 요소 검사>는 XML을 사용하지 않고 콩을 정의하는 것입니다
자세한 내용은 읽기 :
-
==============================
5.둘 사이의 차이는 정말 간단합니다!
둘 사이의 차이는 정말 간단합니다!
<context:annotation-config />
당신은 속성 만 콩의 생성자를 배선에 제한 주석을 사용할 수 있습니다!
그런데, ...한데
<context:component-scan base-package="org.package"/>
<: 주석-설정은 / 컨텍스트> 고정 관념 예 .. @Component, @Service, @Repository를 사용하여 추가로 할 수있는 모든 수 있습니다. 그래서 당신은 전체 콩을 연결할 수 있습니다 그냥 생성자 또는 속성에 제한되지!
-
==============================
6.<컨텍스트 : 주석-설정> : 봄 구성 XML에 이미 등록 된 콩에 대한 검색 및 활성화 주석.
<컨텍스트 : 주석-설정> : 봄 구성 XML에 이미 등록 된 콩에 대한 검색 및 활성화 주석.
<배경 : 성분 주사> 콩 등록 + <컨텍스트 : 주석 - 구성>
콩 전에 봄 IOC에 등록이 주석을 사용해야하므로 @Autowired와 @Required는 목표 속성 수준이다. 이러한 주석을 사용하거나 각각의 콩을 등록하거나 <: 주석 - 설정 / 컨텍스트>를 포함해야합니다. 즉 <맥락 : 주석 - 설정 />는 등록 된 콩 작동합니다.
@Required하는 RequiredAnnotationBeanPostProcessor는 프로세싱 툴있게 @Autowired는 AutowiredAnnotationBeanPostProcessor 프로세싱 툴있게
참고 : 할 수있는 주석 자체 아무것도, 우리는 핵심 프로세스에 대한 책임 아래 클래스, 인 처리 도구가 필요합니다.
@Repository, @Service와 @Controller는 @Component이며, 그들은 클래스 레벨을 목표로하고있다.
<컨텍스트 : 구성 요소 검사>는 패키지를 검색하고 콩을 찾아 등록하고 <컨텍스트 : 주석 - 설정 />에 의해 수행 된 작업이 포함되어 있습니다.
주석에 XML 마이그레이션
-
==============================
7.의 <컨텍스트 : 주석 - 설정> 태그는 자동으로 @Autowired 어노테이션을 포함하는 클래스의 의존성 요구 사항을 해결하기위한 코드베이스를 스캔 봄을 알려줍니다.
의 <컨텍스트 : 주석 - 설정> 태그는 자동으로 @Autowired 어노테이션을 포함하는 클래스의 의존성 요구 사항을 해결하기위한 코드베이스를 스캔 봄을 알려줍니다.
스프링 2.5 또한 @Resource, @PostConstruct JSR-250 등의 특수 효과에 대한 지원을 추가하고 이러한 주석 PreDestroy.Use @ 또한 특정 위해 BeanPostProcessors 스프링 컨테이너 내에 등록 할 것을 요구한다. 언제나처럼, 이러한 개별 빈 정의로 등록 할 수 있지만,이 또한 암시 적으로 포함하여 등록 할 수 있습니다 <컨텍스트 : 주석 - 설정> 봄 구성 태그입니다.
주석 기반 구성의 봄 문서에서 촬영
스프링 자동 "상동"클래스를 검출 ApplicationContext에 대응 BeanDefinitions를 등록하는 기능을 제공한다.
org.springframework.stereotype의 javadoc에 따르면 :
고정 관념은 유형 또는 전체 아키텍처의 메소드의 역할을 나타내는 주석 (오히려 구현보다 개념에서, 레벨)이다. 예 : @Controller @Service @Repository 등 이러한 도구와 측면 (포인트 컷에 대한 이상적인 대상을)에 의해 사용하기위한 것입니다.
이러한 '스테레오'클래스를 자동으로 감지하기 위하여, <컨텍스트 : 성분 주사> 태그가 요구된다.
의 <컨텍스트 : 구성 요소 검사> 태그는도 지정 주사 패키지에서 콩 (및 모든 하위 패키지)에 대한 코드를 스캔 봄을 알려줍니다.
-
==============================
8.
<context:annotation-config>
만의 @Autowired와 @Qualifer 주석을 해결 의존성 삽입에 대한 모든 됐죠, 같은 일을 다른 주석이있다, 나는 어떻게 @Inject를 생각하지만, 주석을 통해 DI를 해결하기 위해 모두에 대해.
당신이 빈 어쨌든, 우리는 세 가지 옵션이 기억하는 방법 클래스를 선언해야 요소 : 당신은 <주석 - 설정 상황>을 선언 한 경우에도주의
이제와
<context:component-scan>
그것은 두 가지 작업을 수행합니다 :
당신이 선언 따라서 경우 <컨텍스트 : 구성 요소가 스캔>, 더 이상 선언 할 필요가 없습니다 <컨텍스트 : 주석 - 설정> 너무.
그게 다야
일반적인 시나리오는 예를 들어, 예를 들어, XML을 통해 단지 빈을 선언하고 주석을 통해 DI를 해결했다
<bean id="serviceBeanA" class="com.something.CarServiceImpl" /> <bean id="serviceBeanB" class="com.something.PersonServiceImpl" /> <bean id="repositoryBeanA" class="com.something.CarRepository" /> <bean id="repositoryBeanB" class="com.something.PersonRepository" />
우리는, <생성자 인수> 및 <부동산>가, 디가 @Autowired를 통해 자신의 클래스로 구성되어 있습니다에 대한 아무것도 콩을 선언 없다. 이 서비스는 자신의 저장소 구성 요소에 대한 @Autowired를 사용하는 것을 의미하고, 저장소는 JdbcTemplate을, 데이터 소스 etc..components 위해 @Autowired를 사용
-
==============================
9.
<context:component-scan /> implicitly enables <context:annotation-config/>
함께 시도 <컨텍스트 : 구성 요소 스캔 기본 패키지 = "..."주석 - 설정 = "거짓"/>, 구성 @Service에, @Repository는, @Component는 잘 작동하지만 autowire가 @, 자원 및 @Inject @ 작동하지 않습니다.
이 AutowiredAnnotationBeanPostProcessor이 활성화되지 않고 Spring 컨테이너가를 autowiring 주석을 처리하지 않습니다 것을 의미합니다.
-
==============================
10.
<context:annotation-config/> <!-- is used to activate the annotation for beans --> <context:component-scan base-package="x.y.MyClass" /> <!-- is for the Spring IOC container to look for the beans in the base package. -->
주목해야 할 또 다른 중요한 점은 그 맥락이다 : 구성 요소 검사는 암시 적 컨텍스트를 호출 주석-설정은 콩에 주석을 활성화 할 수 있습니다. 당신이 컨텍스트하지 않으려면 음 : false로 구성 요소를 스캔 : 암시에 대한 주석을 활성화하기 위해 구성 요소 검사를, 당신은 문맥의 주석-config 요소 설정에 갈 수 있습니다.
요약:
<context:annotation-config/> <!-- activates the annotations --> <context:component-scan base-package="x.y.MyClass" /> <!-- activates the annotations + register the beans by looking inside the base-package -->
-
==============================
11.은 <컨텍스트 : 성분 주사 /> 커스텀 태그 클래스 경로에서 빈 정의 자바 패키지를 검색 및 등록의 일차적 인 책임 이격에 의해 수행되는 것처럼 빈 정의의 동일한 세트를 등록한다.
은 <컨텍스트 : 성분 주사 /> 커스텀 태그 클래스 경로에서 빈 정의 자바 패키지를 검색 및 등록의 일차적 인 책임 이격에 의해 수행되는 것처럼 빈 정의의 동일한 세트를 등록한다.
어떤 이유로 기본 빈 정의의 등록을 피해야 할 경우, 그렇게 할 수있는 방법은 구성 요소 검사에 추가 "주석-설정"속성을 지정하는 것입니다,이 방법 :
<context:component-scan basePackages="" annotation-config="false"/>
참고: http://www.java-allandsundry.com/2012/12/contextcomponent-scan-contextannotation.html
-
==============================
12.<배경 : 성분 주사 기본 패키지 = "패키지 명"/>
<배경 : 성분 주사 기본 패키지 = "패키지 명"/>
이것은 그 빈 클래스를 스캔 내 패키지에서 콩 클래스가 있다는 용기를 얘기하는 데 사용됩니다. 빈 위에 컨테이너에 의해 빈 클래스를 스캔하기 위해 우리는 다음과 같은 스테레오 타입 주석 중 하나를 작성해야합니다.
@Component, @Service, @Repository, @Controller
<컨텍스트 : 주석 - 설정 />
우리는 다음 XML에 명시 적으로 빈 태그를 작성하지 않으려면 빈에서 자동 배선이있는 경우 컨테이너가 알고있는 방법에 대해 설명합니다. 이 @Autowired 어노테이션을 사용하여 가능하다. 주석 - 설정 : 우리는 문맥에 의해 내 콩에 자동 배선이 컨테이너에 통보해야합니다.
-
==============================
13.<컨텍스트 : 주석 - 설정>
<컨텍스트 : 주석 - 설정>
이것은 내가 스프링 빈으로 주석 콩을 사용하기 위하여려고하고 그 대신 봄 설정 XML 파일에 선언의, @Autowired 어노테이션을 통해 유선 것이라고 봄을 알려줍니다.
<배경 : 성분 주사 기본 패키지 = "com.test ...">
이것은 그 주석 콩을 검색을 시작하는 스프링 컨테이너를 알려줍니다. 여기에 봄은 기본 패키지의 모든 하위 패키지를 검색합니다.
-
==============================
14.당신은 스프링 컨텍스트 스키마 파일에서 자세한 정보를 찾을 수 있습니다. 다음은 스프링 상황에 4.3.xsd
당신은 스프링 컨텍스트 스키마 파일에서 자세한 정보를 찾을 수 있습니다. 다음은 스프링 상황에 4.3.xsd
<conxtext:annotation-config />
Activates various annotations to be detected in bean classes: Spring's @Required and @Autowired, as well as JSR 250's @PostConstruct, @PreDestroy and @Resource (if available), JAX-WS's @WebServiceRef (if available), EJB 3's @EJB (if available), and JPA's @PersistenceContext and @PersistenceUnit (if available). Alternatively, you may choose to activate the individual BeanPostProcessors for those annotations. Note: This tag does not activate processing of Spring's @Transactional or EJB 3's @TransactionAttribute annotation. Consider the use of the <tx:annotation-driven> tag for that purpose.
<context:component-scan>
Scans the classpath for annotated components that will be auto-registered as Spring beans. By default, the Spring-provided @Component, @Repository, @Service, @Controller, @RestController, @ControllerAdvice, and @Configuration stereotypes will be detected. Note: This tag implies the effects of the 'annotation-config' tag, activating @Required, @Autowired, @PostConstruct, @PreDestroy, @Resource, @PersistenceContext and @PersistenceUnit annotations in the component classes, which is usually desired for autodetected components (without external configuration). Turn off the 'annotation-config' attribute to deactivate this default behavior, for example in order to use custom BeanPostProcessor definitions for handling those annotations. Note: You may use placeholders in package paths, but only resolved against system properties (analogous to resource paths). A component scan results in new bean definitions being registered; Spring's PropertySourcesPlaceholderConfigurer will apply to those bean definitions just like to regular bean definitions, but it won't apply to the component scan settings themselves.
-
==============================
15.주석 방법 : 보완, 당신은 <구성 요소 스캔 컨텍스트> 사용 @ComponentScan를 사용할 수 있습니다.
주석 방법 : 보완, 당신은 <구성 요소 스캔 컨텍스트> 사용 @ComponentScan를 사용할 수 있습니다.
또한 spring.io에 설명 있어요
당신이 봄 부팅을 사용하는 경우,주의 할 점은 @Configuration과 @ComponentScan는 @SpringBootApplication 주석을 사용하여 암시 할 수있다.
from https://stackoverflow.com/questions/7414794/difference-between-contextannotation-config-and-contextcomponent-scan by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 봄 5 WebFlux의 웹 클라이언트 시간 제한을 설정하는 방법 (0) | 2019.10.23 |
---|---|
[SPRING] 어떻게 UTC 시간대에 봄 부팅 JVM을 강요하는 걸까? (0) | 2019.10.22 |
[SPRING] 자바 - 봄 WS -로드 상대는 XSD 파일에 포함 (톰캣 8) (0) | 2019.10.21 |
[SPRING] 봄은``유형의 하나 이상의 콩이있다, autowire가 없습니다 (0) | 2019.10.19 |
[SPRING] 재귀 thymeleaf 사용하여 메뉴를 렌더링하는 방법 (0) | 2019.10.18 |