Rozdiel medzi vs
1. Prehľad
V tomto výučbe sa dozvieme o rozdieloch medzi dvoma hlavnými prvkami konfigurácie XML Spring: a .
2. Definície fazule
Ako všetci vieme, Spring nám poskytuje dva spôsoby, ako definovať naše fazule a závislosti: konfigurácia XML a anotácie Java. Jarné anotácie môžeme tiež kategorizovať do dvoch skupín: anotácie s injekciou závislosti a anotácie s fazuľami.
Pred anotáciami sme museli manuálne definovať všetky naše fazule a závislosti v konfiguračných súboroch XML. Teraz vďaka jarným anotáciám môže pre nás automaticky objaviť a prepojiť všetky naše fazule a závislosti. Takže môžeme vylúčiť aspoň XML potrebné pre boby a závislosti.
Mali by sme si to však pamätať anotácie sú zbytočné, pokiaľ ich neaktivujeme. Aby sme ich aktivovali, môžeme pridať buď alebo navrch nášho súboru XML.
V tejto časti uvidíme ako a sa navzájom líšia, pokiaľ ide o ich spôsoby aktivácie anotácií.
3. Aktivácia anotácií do <kontext: anotácia-konfigurácia>
The anotácia sa používa hlavne na aktiváciu anotácií injekcie závislostí. @Autowired, @Qualifier, @PostConstruct, @PreDestroya @ Zdroj sú niektoré z tých, ktoré môže vyriešiť.
Urobme si jednoduchý príklad a ukážeme si, ako na to môže pre nás zjednodušiť konfiguráciu XML.
Najskôr vytvorme triedu s poľom závislosti:
verejná trieda UserService {@Autowired private AccountService accountService; }
verejná trieda AccountService {}
Poďme si teraz definovať našu fazuľu.
Predtým, ako pôjdeme ďalej, upozorníme, že v XML musíme deklarovať fazuľa. Je to preto aktivuje anotácie iba pre fazuľa už zaregistrovaná v kontexte aplikácie.
Ako je tu vidieť, anotovali sme accountService pole pomocou @Autowired. @Autowired povie Spring, že toto pole je závislosť, ktorú musí automaticky prepojiť zodpovedajúci fazuľa.
Keby sme nepoužili @Autowired, potom by sme potrebovali nastaviť accountService závislosť ručne:
Teraz môžeme odkazovať na naše fazule a závislosti v teste jednotky:
@Test public void givenContextAnnotationConfig_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, niečo tu nie je v poriadku. Vyzerá to, že Spring nie je zapojený accountService aj keď sme to anotovali @Autowired. Vyzerá to ako @Autowired nie je aktívny. Aby sme tento problém vyriešili, do nášho súboru XML jednoducho pridáme nasledujúci riadok:
4. Aktivácia anotácií do <kontext: skenovanie komponentov>
Ako podobné , dokáže rozpoznať a spracovať aj anotácie na zavedenie závislostí. Navyše, rozoznáva anotácie fazule, ktoré nezistí.
V podstate detekuje anotácie skenovaním balíka. Aby som to povedal inak, povie Springovi, ktoré balíčky je potrebné prehľadať, aby sa našli anotované fazule alebo komponenty.
@ Komponent, @Úložisko, @Služba, @ Kontrolór, @RestControllera @ Konfigurácia je niekoľko takých, ktoré môže zistiť.
Teraz sa pozrime, ako môžeme zjednodušiť náš predchádzajúci príklad:
@ Komponenta verejná trieda UserService {@Autowired private AccountService accountService; }
@Component public class AccountService {}
Tu je @ Komponent anotácia označuje naše triedy ako fazuľa. Teraz môžeme vyčistiť všetky definície fazule z nášho súboru XML. A samozrejme si musíme ponechať navyše:
Na záver si všimnime, že jar bude hľadať anotované fazule a závislosti v balíku označenom znakom základný balík atribút.
5. Záver
V tomto tutoriáli sme sa pozreli na rozdiely medzi a .
Ukážky kódu, ako vždy, sú na GitHube u konca.