Forskjellen mellom vs.

1. Oversikt

I denne opplæringen skal vi lære om forskjellene mellom to store XML-konfigurasjonselementer fra våren: og .

2. Bean Definisjoner

Som vi alle vet, gir Spring oss to måter å definere bønner og avhengigheter på: XML-konfigurasjon og Java-merknader. Vi kan også kategorisere vårens merknader under to grupper: avhengighetsinjeksjonskommentarer og bønnekommentarer.

Før merknader måtte vi definere alle bønner og avhengigheter manuelt i XML-konfigurasjonsfiler manuelt. Nå takket være vårens merknader, det kan automatisk oppdage og koble alle bønner og avhengigheter for oss. Så vi kan i det minste eliminere XML som trengs for bønner og avhengigheter.

Vi bør imidlertid huske det merknader er ubrukelige med mindre vi aktiverer dem. For å aktivere dem, kan vi legge til en av dem eller på toppen av XML-filen vår.

I denne delen vil vi se hvordan og skiller seg fra hverandre når det gjelder måter å aktivere merknader på.

3. Aktivering av merknader med <kontekst: annotation-config>

De merknader brukes hovedsakelig for å aktivere merknader for injeksjonsavhengighet. @Autowired, @Kvalifiserende, @PostConstruct, @PreDestroy, og @Ressurs er noen av de som kan løse.

La oss lage et enkelt eksempel for å se hvordan kan forenkle XML-konfigurasjonen for oss.

La oss først lage en klasse med et avhengighetsfelt:

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

La oss nå definere våre bønner.

Før vi går videre, la oss påpeke at vi fortsatt trenger å erklære bønner i XML. Det er fordi aktiverer merknadene bare for bønnene som allerede er registrert i applikasjonssammenheng.

Som du kan se her, kommenterte vi accountService feltbruk @Autowired. @Autowired forteller Spring at dette feltet er en avhengighet som må kobles automatisk av en matchende bønne.

Hvis vi ikke brukte det @Autowired, da ville vi trenge å stille inn accountService avhengighet manuelt:

Nå kan vi referere til våre bønner og avhengigheter i en enhetstest:

@Test offentlig ugyldighet gittContextAnnotationConfig_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, noe er galt her. Det ser ut som om våren ikke kobler til accountService selv om vi kommenterte det av @Autowired. Det ser ut som @Autowired er ikke aktiv. For å løse dette problemet vil vi bare legge til følgende linje på toppen av XML-filen:

4. Aktivering av merknader med <kontekst: komponent-skanning>

Som lik , kan gjenkjenne og behandle merknadene for avhengighetsinjeksjon. Videre anerkjenner bønneannotasjoner som oppdager ikke.

I utgangspunktet, oppdager kommentarene ved pakkeskanning. For å si det annerledes, forteller det Spring hvilke pakker som må skannes for å se etter de merkede bønnene eller komponentene.

@Komponent, @Oppbevaringssted, @Service, @Kontrollør, @RestController, og @Konfigurasjon er flere som kan oppdage.

La oss nå se hvordan vi kan forenkle vårt forrige eksempel:

@Component public class UserService {@Autowired private AccountService accountService; } 
@Component public class AccountService {}

Her, den @Komponent kommentar markerer klassene våre som bønner. Nå kan vi rydde ut alle bønnedefinisjonene fra XML-filen vår. Og selvfølgelig må vi beholde på toppen av det:

Til slutt, la oss merke at våren vil se etter merkede bønner og avhengigheter under pakken som er angitt av basepakke Egenskap.

5. Konklusjon

I denne opplæringen så vi på forskjellene mellom og .

Kodeeksempler er som alltid over på GitHub.


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