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.


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