724 Stimmen

Unterschied zwischen <context:annotation-config> und <context:component-scan>

Ich lerne gerade Spring 3 und scheine die Funktionalität dahinter nicht zu verstehen <context:annotation-config> y <context:component-scan> .

Nach dem, was ich gelesen habe, scheinen sie unterschiedlich zu handeln Anmerkungen ( @Required , @Autowired usw. gegen @Component , @Repository , @Service usw.), aber auch von dem, was ich gelesen habe, registrieren sie die gleichen Bohnen-Postprozessor Klassen.

Um mich noch mehr zu verwirren, gibt es eine annotation-config Attribut auf <context:component-scan> .

Kann jemand etwas Licht auf diese Tags werfen? Was ist ähnlich, was ist anders, wird das eine durch das andere ersetzt, ergänzen sie sich gegenseitig, brauche ich eines davon, beide?

1voto

<context:component-scan base-package="package name" /> :

Dies wird verwendet, um dem Container mitzuteilen, dass es Bean-Klassen in meinem Paket gibt und diese Bean-Klassen zu scannen. Um Bean-Klassen durch den Container über der Bean zu scannen, müssen wir eine der Stereotyp-Annotationen wie die folgende schreiben.

@Component , @Service , @Repository , @Controller

<context:annotation-config /> :

Wenn wir das Bean-Tag nicht explizit in XML schreiben wollen, wie soll der Container dann wissen, ob es eine automatische Verdrahtung in der Bean gibt. Dies ist möglich durch die Verwendung von @Autowired Annotation. Wir müssen dem Container mitteilen, dass es eine automatische Verdrahtung in meiner Bean gibt, indem wir context:annotation-config .

0voto

Abhishek Gaur Punkte 607

A <context:component-scan/> registriert den gleichen Satz von Bean-Definitionen wie der von , abgesehen von seiner primären Aufgabe, die Java-Pakete zu scannen und Bean-Definitionen aus dem Klassenpfad zu registrieren.

Wenn aus irgendeinem Grund diese Registrierung von Standard-Bean-Definitionen vermieden werden soll, kann dies durch die Angabe eines zusätzlichen "annotation-config"-Attributs in "component-scan" auf diese Weise geschehen:

<context:component-scan basePackages="" annotation-config="false"/>

Referenz: http://www.java-allandsundry.com/2012/12/contextcomponent-scan-contextannotation.html

0voto

Sajal Chakraborty Punkte 123

<context:annotation-config> :

Dies sagt Spring, dass ich Annotated Beans als Spring Bean verwenden werde und diese durch @Autowired Annotation, anstatt in der spring config xml Datei zu deklarieren.

<context:component-scan base-package="com.test..."> :

Dies teilt dem Spring-Container mit, wo er mit der Suche nach den annotierten Beans beginnen soll. Hier wird Spring alle Unterpakete des Basispakets durchsuchen.

0voto

coffeenjava Punkte 106

Weitere Informationen finden Sie in der Datei spring context schema. Folgendes ist in spring-context-4.3.xsd enthalten

<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.

0voto

Eugene Punkte 9467

Ergänzend können Sie Folgendes verwenden @ComponentScan zu verwenden <context:component-scan> in Form von Kommentaren.

Es ist auch beschrieben unter spring.io

Konfiguriert Komponenten-Scan-Direktiven für die Verwendung mit @Konfigurationsklassen. Bietet Unterstützung parallel zu Spring XML's Element.

Wenn Sie Spring Boot verwenden, können die @Configuration und @ComponentScan durch die @SpringBootApplication-Annotation impliziert werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X