Razlika između vs.

1. Pregled

U ovom uputstvu naučit ćemo o razlikama između dva glavna elementa XML konfiguracije Springa: i .

2. Definicije graha

Kao što svi znamo, Spring nam pruža dva načina za definiranje graha i ovisnosti: XML konfiguracija i Java napomene. Proljetne bilješke također možemo svrstati u dvije skupine: napomene ubrizgavanja ovisnosti i bilješke graha.

Prije bilješki morali smo ručno definirati sve svoje grahove elemente i ovisnosti u XML konfiguracijskim datotekama. Sada zahvaljujući proljetnim bilješkama, može automatski otkriti i povezati sav naš grah i ovisnosti za nas. Dakle, možemo barem eliminirati XML potreban za grah i ovisnosti.

Međutim, toga bismo se trebali sjetiti napomene su beskorisne ako ih ne aktiviramo. Da bismo ih aktivirali, možemo dodati bilo koji ili na vrhu naše XML datoteke.

U ovom ćemo odjeljku vidjeti kako i međusobno se razlikuju u pogledu načina aktiviranja bilješki.

3. Aktiviranje bilješki od <kontekst: annotation-config>

The napomena se uglavnom koristi za aktiviranje napomena ubrizgavanja ovisnosti. @Autowired, @Kvalifikator, @PostConstruct, @PreDestroy, i @Resurs neki su od onih koji može riješiti.

Napravimo jednostavan primjer da vidimo kako može nam pojednostaviti XML konfiguraciju.

Prvo, kreirajmo klasu s poljem ovisnosti:

javna klasa UserService {@Autowired private AccountService accountService; }
javna klasa AccountService {}

Sada, definirajmo naš grah.

Prije nego što krenemo dalje, istaknimo da još moramo deklarirati grah u XML-u. To je zato što aktivira napomene samo za grah koji je već registriran u kontekstu aplikacije.

Kao što se ovdje može vidjeti, označili smo accountService polje pomoću @Autowired. @Autowired govori Springu da je ovo polje ovisnost koju treba automatski povezati odgovarajućim grahom.

Da nismo koristili @Autowired, tada bismo trebali postaviti accountService ovisnost ručno:

Sada se možemo pozvati na naš grah i ovisnosti u jediničnom testu:

@Test javna praznina 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, ovdje nešto nije u redu. Čini se da Spring ne povezuje accountService iako smo to zabilježili @Autowired. Izgleda kao @Autowired nije aktivan. Da bismo riješili ovaj problem, jednostavno ćemo dodati sljedeći redak na vrh naše XML datoteke:

4. Aktiviranje bilješki od <kontekst: komponenta-skeniranje>

Kao što je slično , može prepoznati i obraditi i napomene ubrizgavanja ovisnosti. Štoviše, prepoznaje bilješke graha koje ne otkriva.

U osnovi, otkriva napomene skeniranjem paketa. Drugim riječima, Springu govori koje pakete treba skenirati kako bi se pronašli označeni grah ili komponente.

@Komponenta, @ Repozitorij, @Servis, @Controller, @RestController, i @Konfiguracija je nekoliko onih koji može otkriti.

Sada da vidimo kako možemo pojednostaviti naš prethodni primjer:

@Component javna klasa UserService {@Autowired private AccountService accountService; } 
@Component javni razred AccountService {}

Evo, @Komponenta napomena označava naše razrede kao grah. Sada možemo očistiti sve definicije graha iz naše XML datoteke. I naravno, moramo zadržati povrh toga:

Na kraju, imajmo na umu da će Spring tražiti označeni grah i ovisnosti u paketu označenom znakom osnovni paket atribut.

5. Zaključak

U ovom smo tutorijalu pogledali razlike između i .

Uzorci koda, kao i uvijek, završeni su na GitHubu.