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.