Különbség vs.
1. Áttekintés
Ebben az oktatóanyagban megismerhetjük a Spring két fő XML konfigurációs eleme közötti különbségeket: és .
2. Babdefiníciók
Mint mindannyian tudjuk, a Spring kétféle módon határozhatja meg babjainkat és függőségeinket: XML konfiguráció és Java megjegyzések. A Spring annotációit két csoportba is sorolhatjuk: függőségi injekció és bab bab.
A kommentárok előtt kézzel kellett meghatároznunk az összes babot és függőséget az XML konfigurációs fájlokban. Most a tavaszi kommentároknak köszönhetően automatikusan felfedezheti és összekötheti számunkra az összes babunkat és függőségünket. Tehát legalább kiküszöbölhetjük a babokhoz és a függőségekhez szükséges XML-t.
Arra azonban emlékeznünk kell a kommentárok haszontalanok, hacsak nem aktiváljuk őket. Aktiválásukhoz bármelyiket hozzáadhatjuk vagy az XML fájlunk tetején.
Ebben a részben meglátjuk, hogyan és különböznek egymástól abban, hogy miként aktiválják a kommentárokat.
3. Annotation Aktiválás <általcontext: annotation-config>
A az annotációt főként a függőségi injekció annotációinak aktiválására használják. @Autowired, @ Minősítő, @PostConstruct, @PreDestroy, és @Forrás vannak azok, amelyek meg tudja oldani.
Tegyünk egy egyszerű példát, hogy lássuk, hogyan egyszerűsítheti számunkra az XML konfigurációt.
Először hozzunk létre egy osztályt egy függőségi mezővel:
public class UserService {@Autowired private AccountService accountService; }
public class AccountService {}
Most definiáljuk a babunkat.
Mielőtt továbbmennénk, mutassuk meg, hogy még mindig be kell jelentenünk a babot az XML-ben. Ez azért van, mert csak azokra a babokra aktiválja a jelöléseket, amelyek már regisztrálva vannak az alkalmazás környezetében.
Amint itt látható, jegyzeteltük a accountService mező használatával @Autowired. @Autowired elmondja Springnek, hogy ez a mező egy függőség, amelyet automatikusan hozzá kell kötni egy hozzá tartozó babhoz.
Ha nem használnánk @Autowired, akkor be kell állítanunk a accountService függőség manuálisan:
Most egy egység tesztben hivatkozhatunk babunkra és függőségeinkre:
@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, itt valami nincs rendben. Úgy tűnik, hogy Spring nem köti be a accountService annak ellenére, hogy annotáltuk @Autowired. Úgy néz ki @Autowired nem aktív. A probléma megoldása érdekében egyszerűen hozzáadjuk a következő sort az XML fájlunk tetejére:
4. Annotation Aktiválás: <kontextus: component-scan>
Mint hasonló , képes felismerni és feldolgozni a függőségi injekció annotációit is. Ráadásul, felismeri a bab megjegyzéseket, amelyek nem érzékeli.
Alapvetően, csomag felderítéssel észleli a jegyzeteket. Másképp fogalmazva, elmondja Springnek, hogy melyik csomagokat kell átvizsgálni a feljegyzett babok vagy alkatrészek megkereséséhez.
@Összetevő, @Raktár, @Szolgáltatás, @Vezérlő, @RestController, és @ Konfiguráció több olyan is észlelni tudja.
Most nézzük meg, hogyan egyszerűsíthetjük az előző példánkat:
@Component public class UserService {@Autowired private AccountService accountService; }
@Component public class AccountService {}
Itt a @Összetevő az annotáció babként jelöli osztályainkat. Most megtisztíthatjuk az összes babdefiníciót az XML fájlunkból. És természetesen meg kell tartanunk a a tetején:
Végül jegyezzük meg, hogy a tavasz megkeresi a feljegyzett babokat és függőségeket a alap-csomag tulajdonság.
5. Következtetés
Ebben az oktatóanyagban áttekintettük a különbségeket és .
A kódminták, mint mindig, befejeződtek a GitHubon.