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.