Mengapa kita tidak dapat melakukan autowire variabel instance statis di kacang Spring. Saya tahu ada cara lain untuk mencapai ini tetapi hanya ingin tahu mengapa kita tidak bisa melakukannya dengan cara di bawah ini.
misalnya
@Autowired
public static Test test;
Jawaban:
Karena menggunakan bidang statis mendorong penggunaan metode statis. Dan metode statis itu jahat. Tujuan utama injeksi ketergantungan adalah membiarkan container membuat objek untuk Anda dan menyambungkannya. Juga membuat pengujian lebih mudah.
Setelah Anda mulai menggunakan metode statis, Anda tidak perlu lagi membuat instance objek dan pengujian jauh lebih sulit. Anda juga tidak dapat membuat beberapa instance dari kelas tertentu, masing-masing dengan ketergantungan yang berbeda sedang dimasukkan (karena bidang tersebut secara implisit dibagikan dan menciptakan keadaan global - juga jahat).
sumber
@BeforeClass
SpringJUnit4ClassRunner, dan memiliki metode akses kacang@Autowired
dalam pengujian .. Anda pada dasarnya tidak bisa. Itu menyebalkan.Karena saat class loader memuat nilai statis, konteks Spring belum tentu dimuat. Jadi pemuat kelas tidak akan menyuntikkan bidang statis dengan benar dalam kacang dan akan gagal.
sumber
Menurut konsep OOP, akan menjadi desain yang buruk jika variabel statis di-autowired.
Variabel statis bukanlah properti Objek, tetapi merupakan properti Kelas. Pengkabelan otomatis pegas dilakukan pada objek, dan itu membuat desainnya bersih menurut saya. Anda dapat menerapkan objek kacang kabel otomatis sebagai tunggal, dan mencapai hal yang sama dengan mendefinisikannya sebagai statis.
sumber
Dengan solusi ini, Anda dapat mengaktifkan medan statis secara otomatis di musim semi.
sumber