A @Autowired használata absztrakt osztályokban

1. Bemutatkozás

Ebben a gyors bemutatóban elmagyarázzuk a @Autowired annotáció absztrakt osztályokban.

Jelentkezni fogunk @Autowired elvont osztályba, és koncentráljon azokra a fontos szempontokra, amelyeket figyelembe kell vennünk.

2. Szetter injekció

Tudjuk használni @Autowired szetter módszerrel:

public absztrakt osztály BallService {private LogRepository logRepository; @Autowired public final void setLogRepository (LogRepository logRepository) {this.logRepository = logRepository; }}

Amikor használjuk @Autowired egy szetteres módszernél használnunk kell a végső kulcsszó, hogy az alosztály ne tudja felülírni a szetter metódust. Ellenkező esetben a kommentár nem fog megfelelően működni.

3. Konstruktor befecskendezése

Nem használhatjuk @Autowired egy absztrakt osztály konstruktorán.

Tavasz nem értékeli a @Autowired annotáció egy absztrakt osztály konstruktorán. Az alosztálynak meg kell adnia a szükséges érveket a szuper konstruktőr.

Ehelyett használnunk kell @Autowired az alosztály kivitelezőjén:

public abstract class BallService {private RuleRepository ruleRepository; public BallService (RuleRepository ruleRepository) {this.ruleRepository = ruleRepository; }}
@ A Component public class BasketballService kiterjeszti a BallService szolgáltatást {@Autowired public BasketballService (RuleRepository ruleRepository) {super (ruleRepository); }}

4. Csalólap

Tartsunk be néhány szabályt, amire emlékezhetünk.

Első, egy absztrakt osztály nem komponens-vizsgálat mivel konkrét alosztály nélkül nem példázható.

Második, a szetter injektálása elvont osztályban lehetséges, de kockázatos, ha nem használjuk a végső kulcs a szetter módszerhez. Előfordulhat, hogy az alkalmazás nem stabil, ha egy alosztály felülírja a szetter módszert.

Harmadszor, mivel Spring nem támogatja a konstruktor injektálását egy absztrakt osztályban, általában hagynunk kell, hogy a konkrét alosztályok adják meg a konstruktor érveit. Ez azt jelenti támaszkodnunk kell a konstruktor injektálására a beton alosztályokban.

És végül, a konstruktor injekció használata a szükséges függőségeknél és a szetter injektálás az opcionális függőségeknél jó ökölszabály. Azonban, amint az absztrakt osztályok néhány árnyalatával láthatjuk, a konstruktor befecskendezése kedvezőbb itt általában.

Szóval, valóban ezt mondhatjuk egy konkrét alosztály szabályozza, hogy elvont szülője hogyan szerzi függőségeit. Tavasz fogja megtenni az injekciót amíg Spring felvezeti az alosztályt.

5. Következtetés

Ebben a cikkben gyakoroltuk a felhasználást @Autowired egy elvont osztályon belül, és elmagyarázott néhány, de fontos kulcspontot.

Az oktatóanyag forráskódja a szokásos módon megtalálható a Github projektben.