Forskel mellem vs.

1. Oversigt

I denne vejledning vil vi lære om forskellene mellem to store XML-konfigurationselementer i Spring: og .

2. Definitioner af bønner

Som vi alle ved, giver Spring os to måder at definere vores bønner og afhængigheder på: XML-konfiguration og Java-kommentarer. Vi kan også kategorisere Forårs annoteringer i to grupper: afhængighedsinjektionsanmærkninger og bønneannoteringer.

Forud for annoteringer måtte vi manuelt definere alle vores bønner og afhængigheder i XML-konfigurationsfiler. Nu takket være forårets kommentarer, det kan automatisk finde og binde alle vores bønner og afhængigheder til os. Så vi kan i det mindste fjerne den nødvendige XML til bønner og afhængigheder.

Vi skal dog huske det annoteringer er ubrugelige, medmindre vi aktiverer dem. For at aktivere dem kan vi tilføje en af ​​dem eller oven på vores XML-fil.

I dette afsnit vil vi se hvordan og adskiller sig fra hinanden med hensyn til deres måder at aktivere kommentarer.

3. Aktivering af annotering med <kontekst: annotation-config>

Det annotering bruges hovedsagelig til at aktivere annoteringer om afhængighedsinjektion. @Autowired, @Kvalifikator, @PostConstruct, @PreDestroyog @Ressource er nogle af dem der kan løse.

Lad os lave et simpelt eksempel for at se hvordan kan forenkle XML-konfigurationen for os.

Lad os først oprette en klasse med et afhængighedsfelt:

offentlig klasse UserService {@Autowired privat AccountService accountService; }
offentlig klasse AccountService {}

Lad os nu definere vores bønner.

Lad os påpege, at vi stadig skal erklære bønner i XML, før vi går videre. Det er fordi aktiverer kun kommentarerne for de bønner, der allerede er registreret i applikationskonteksten.

Som det kan ses her, kommenterede vi accountService felt ved hjælp af @Autowired. @Autowired fortæller Spring, at dette felt er en afhængighed, der skal kables automatisk af en matchende bønne.

Hvis vi ikke brugte det @Autowired, så bliver vi nødt til at indstille accountService afhængighed manuelt:

Nu kan vi henvise til vores bønner og afhængigheder i en enhedstest:

@Test offentlig ugyldighed givetContextAnnotationConfig_whenDependenciesAnnotated_thenNoXMLNeeded () {ApplicationContext context = new ClassPathXmlApplicationContext ("classpath: annotationconfigvscomponentscan-beans.xml"); UserService userService = context.getBean (UserService.class); AccountService accountService = context.getBean (AccountService.class); Assert.assertNotNull (userService); Assert.assertNotNull (accountService); Assert.assertNotNull (userService.getAccountService ()); }

Hmm, der er noget galt her. Det ser ud til, at foråret ikke kabler accountService selvom vi kommenterede det ved @Autowired. Det ser ud som om @Autowired er ikke aktiv. For at løse dette problem tilføjer vi blot følgende linje oven på vores XML-fil:

4. Aktivering af annotering med <kontekst: komponentscanning>

Som ligner , kan også genkende og behandle annoncer med afhængighedsinjektion. I øvrigt, anerkender bønneroteringer, der registrerer ikke.

I bund og grund, registrerer kommentarerne ved pakkescanning. For at sige det anderledes fortæller det Spring, hvilke pakker der skal scannes for at se efter de kommenterede bønner eller komponenter.

@Komponent, @Repository, @Service, @Kontrol, @RestControllerog @Konfiguration er flere dem der kan registrere.

Lad os nu se, hvordan vi kan forenkle vores tidligere eksempel:

@Komponent offentlig klasse UserService {@Autowired privat AccountService accountService; } 
@Komponent offentlig klasse AccountService {}

Her, den @Komponent kommentar markerer vores klasser som bønner. Nu kan vi rense alle bønnedefinitioner fra vores XML-fil. Og selvfølgelig skal vi beholde Oven på det:

Lad os endelig bemærke, at Spring vil se efter de kommenterede bønner og afhængigheder under pakken, der er angivet af base-pakke attribut.

5. Konklusion

I denne vejledning gennemgik vi forskellene mellem og .

Kodeprøver er som altid forbi på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found