Menggunakan @Autowired dalam Kelas Abstrak

1. Pengenalan

Dalam tutorial ringkas ini, kami akan menerangkan cara menggunakan anotasi @Autowired di kelas abstrak.

Kami akan menerapkan @Autowired ke kelas abstrak, dan memberi tumpuan kepada perkara-perkara penting yang harus kami pertimbangkan.

2. Suntikan Setter

Kita boleh menggunakan kaedah @Autowired pada setter:

public abstract class BallService { private LogRepository logRepository; @Autowired public final void setLogRepository(LogRepository logRepository) { this.logRepository = logRepository; } }

Apabila kita menggunakan @Autowired pada kaedah setter, kita harus menggunakan yang akhir kata kunci, supaya subkelas tidak boleh mengatasi kaedah penetap itu . Jika tidak, anotasi tidak akan berfungsi seperti yang kita harapkan.

3. Suntikan Pembina

Kami tidak boleh menggunakan @Autowired pada pembina kelas abstrak.

Spring tidak menilai anotasi @Autowired pada pembina kelas abstrak. Subkelas harus memberikan argumen yang diperlukan kepada super konstruktor.

Sebaliknya, kita harus menggunakan @Autowired pada pembangun subkelas:

public abstract class BallService { private RuleRepository ruleRepository; public BallService(RuleRepository ruleRepository) { this.ruleRepository = ruleRepository; } }
@Component public class BasketballService extends BallService { @Autowired public BasketballService(RuleRepository ruleRepository) { super(ruleRepository); } }

4. Menipu Lembaran

Mari kita selesaikan dengan beberapa peraturan yang perlu diingat.

Pertama, kelas abstrak tidak diimbas komponen kerana ia tidak dapat dibuat tanpa subkelas konkrit.

Kedua, suntikan setter boleh dilakukan dalam kelas abstrak , tetapi berisiko jika kita tidak menggunakan kata kunci terakhir untuk kaedah setter. Aplikasi mungkin tidak stabil jika subkelas mengatasi kaedah setter.

Ketiga, kerana Spring tidak menyokong suntikan konstruktor dalam kelas abstrak, kita biasanya membiarkan subkelas konkrit memberikan argumen pembina . Ini bermaksud bahawa kita perlu bergantung pada suntikan konstruktor pada subkelas konkrit .

Dan akhirnya, menggunakan suntikan konstruktor untuk kebergantungan yang diperlukan dan suntikan setter untuk kebergantungan pilihan adalah peraturan yang baik. Walau bagaimanapun, seperti yang dapat kita lihat dengan beberapa nuansa dengan kelas abstrak, suntikan konstruktor lebih disukai di sini secara umum.

Jadi, sebenarnya kita boleh mengatakan bahawa subkelas konkrit mengatur bagaimana induk abstraknya mendapat kebergantungannya . Spring akan melakukan suntikan selagi Spring menyambung subkelas.

5. Kesimpulan

Dalam artikel ini, kami berlatih menggunakan @Autowired dalam kelas abstrak dan menerangkan beberapa perkara penting tetapi penting.

Kod sumber tutorial ini boleh didapati di projek Github seperti biasa.