Korištenje @Autowired u apstraktnoj nastavi

1. Uvod

U ovom brzom vodiču objasnit ćemo kako se koristi @Autowired anotacija u apstraktnoj nastavi.

Podnijet ćemo zahtjev @Autowired apstraktnom razredu i usredotočite se na važne točke koje bismo trebali uzeti u obzir.

2. Injekcija Settera

Možemo koristiti @Autowired na metodi postavljanja:

javna apstraktna klasa BallService {private LogRepository logRepository; @Autowired javna konačna praznina setLogRepository (LogRepository logRepository) {this.logRepository = logRepository; }}

Kad koristimo @Autowired na metodi postavljača, trebali bismo koristiti the konačni ključnu riječ, tako da podrazred ne može nadjačati metodu postavljanja. Inače, napomena neće raditi kako očekujemo.

3. Injektiranje konstruktora

Ne možemo koristiti @Autowired na konstruktoru apstraktne klase.

Proljeće ne procjenjuje @Autowired napomena na konstruktoru apstraktne klase. Podrazred bi trebao pružiti potrebne argumente za super konstruktor.

Umjesto toga, trebali bismo koristiti @Autowired na konstruktoru podrazreda:

javna apstraktna klasa BallService {private RuleRepository ruleRepository; javna BallService (RuleRepository ruleRepository) {this.ruleRepository = ruleRepository; }}
@Component javna klasa BasketballService proširuje BallService {@Autowired javni BasketballService (RuleRepository ruleRepository) {super (ruleRepository); }}

4. varalica

Zaključimo s nekoliko pravila koja ćemo pamtiti.

Prvi, apstraktna klasa nije skenirana komponentama budući da se ne može instancirati bez konkretne podklase.

Drugi, ubrizgavanje setera moguće je u apstraktnoj klasi, ali rizično je ako ne koristimo konačni ključna riječ za metodu postavljanja. Aplikacija možda neće biti stabilna ako podrazred nadjača metodu postavljanja.

Treće, kako Spring ne podržava ubrizgavanje konstruktora u apstraktnu klasu, općenito bismo trebali dopustiti da konkretne potklase daju argumente konstruktora. Ovo znači to moramo se osloniti na ubrizgavanje konstruktora u betonske podrazrede.

I na kraju, dobro je primijeniti ubrizgavanje konstruktora za potrebne ovisnosti i ubrizgavanje postavljača za neobavezne ovisnosti. Međutim, kao što možemo vidjeti s nekim nijansama apstraktnih klasa, ubrizgavanje konstruktora je povoljnije ovdje općenito.

Dakle, stvarno to možemo reći konkretna potklasa određuje kako njezin apstraktni roditelj dobiva ovisnosti. Proljeće će učiniti injekciju sve dok proljeće povezuje podrazred.

5. Zaključak

U ovom smo članku vježbali korištenje @Autowired unutar apstraktne nastave i objasnio nekoliko, ali važnih ključnih točaka.

Izvorni kod ovog vodiča može se naći u projektu Github, kao i obično.