Používanie @Autowired v abstraktných triedach

1. Úvod

V tomto rýchlom výučbe vám vysvetlíme, ako používať @Autowired anotácia v abstraktných triedach.

Podáme žiadosť @Autowired do abstraktnej triedy a zamerať sa na dôležité body, ktoré by sme mali brať do úvahy.

2. Injekcia nastavovača

Môžeme použiť @Autowired metódou setter:

verejná abstraktná trieda BallService {private LogRepository logRepository; @Autowired public final void setLogRepository (LogRepository logRepository) {this.logRepository = logRepository; }}

Keď použijeme @Autowired pri nastavovacej metóde by sme mali použiť the konečné kľúčové slovo, aby podtrieda nemohla prepísať metódu setter. V opačnom prípade nebude anotácia fungovať tak, ako očakávame.

3. Vstrekovanie konštruktéra

Nemôžeme použiť @Autowired na konštruktore abstraktnej triedy.

Jar nehodnotí @Autowired anotácia o konštruktore abstraktnej triedy. Podtrieda by mala poskytnúť potrebné argumenty Super konštruktér.

Namiesto toho by sme mali použiť @Autowired na konštruktore podtriedy:

verejná abstraktná trieda BallService {private RuleRepository ruleRepository; public BallService (RuleRepository ruleRepository) {this.ruleRepository = ruleRepository; }}
@Component public class BasketballService rozširuje BallService {@Autowired public BasketballService (RuleRepository ruleRepository) {super (ruleRepository); }}

4. Podvádzať list

Uveďme len pár pravidiel, ktoré si treba pamätať.

Najprv, abstraktná trieda sa neskenuje pretože to nemožno vytvoriť bez konkrétnej podtriedy.

Po druhé, vstrekovanie nastavovača je možné v abstraktnej triede, ale je to riskantné, ak nepoužívame konečné kľúčové slovo pre metódu setter. Aplikácia nemusí byť stabilná, ak podtrieda prepíše metódu setter.

Po tretie, keďže Spring nepodporuje vkladanie konštruktorov v abstraktnej triede, mali by sme všeobecne nechať konkrétne podtriedy, aby poskytli argumenty konštruktora. To znamená, že musíme sa spoliehať na injektovanie konštruktéra do konkrétnych podtried.

A nakoniec, použitie injektora konštruktora pre požadované závislosti a injektora setra pre voliteľné závislosti je dobrým pravidlom. Ako však vidíme u niektorých odtieňov abstraktných tried, vstrekovanie konštruktéra je priaznivejšie tu všeobecne.

Takže to skutočne môžeme povedať konkrétna podtrieda určuje, ako jej abstraktný rodič získa svoje závislosti. Jar urobí injekciu pokiaľ Pružinové drôty vedú do podtriedy.

5. Záver

V tomto článku sme si precvičili použitie @Autowired v rámci abstraktnej triedy a vysvetlil niekoľko, ale dôležitých kľúčových bodov.

Zdrojový kód tohto tutoriálu nájdete v projekte Github ako obvykle.