Katakanlah kita memiliki kelas:
public class MyClass {
@Autowired private AnotherBean anotherBean;
}
Kemudian kami membuat objek kelas ini (atau beberapa kerangka kerja lain telah membuat instance dari kelas ini).
MyClass obj = new MyClass();
Apakah mungkin masih menyuntikkan dependensi? Sesuatu seperti:
applicationContext.injectDependencies(obj);
(Saya pikir Google Guice memiliki sesuatu seperti ini)
java
spring
dependency-injection
Igor Mukhin
sumber
sumber
code
private @Autowired AnotherBean bean; public void doStuff () {MyBean obj = new MyBean (bean); }code
. Tampaknya seperti dengan semua anotasi ini orang menjadi benar-benar bingung dan tidak menggunakan pola dasar yang ada di java SDK sejak hari pertama: :(Anda juga dapat menandai MyClass Anda dengan anotasi @Configurable:
Kemudian pada saat pembuatan ia akan secara otomatis menyuntikkan dependensinya. Anda juga harus memiliki
<context:spring-configured/>
dalam konteks aplikasi Anda xml.sumber
<context:spring-configured/>
?Baru saja mendapatkan kebutuhan yang sama dan dalam kasus saya sudah logika di dalam kelas java non Spring dikelola yang memiliki akses ke
ApplicationContext
. Terinspirasi oleh scaffman. Dipecahkan oleh:sumber
Saya ingin berbagi solusi yang mengikuti
@Configurable
pendekatan seperti yangbriefly
disebutkan dalam jawaban @ glaz666 karenaPengaturan saya
Spring Neo4j & Aop starts
(yang bagaimanapun juga tidak relevan)Spring Boot
siap menggunakan@Configurable
pendekatan (menggunakanApplicationRunner
)Langkah
Saya perlu mengikuti langkah-langkah di bawah untuk membuatnya berfungsi
@Configurable(preConstruction = true, autowire = Autowire.BY_TYPE, dependencyCheck = false)
ditempatkan di atas AndaBean
yang akan digunakan secara manual. Dalam kasus sayaBean
yang akan digunakan secara manual memiliki@Autowired
layanan karenanya, alat untuk penjelasan di atas.XXXApplicaiton.java
(atau file yang dijelaskan dengan@SpringBootApplication
) dengan@EnableSpringConfigured
dan@EnableLoadTimeWeaving(aspectjWeaving=AspectJWeaving.ENABLED)
compile('org.springframework.boot:spring-boot-starter-aop')
dancompile('org.springframework:spring-aspects:5.0.7.RELEASE')
Bean
yang dianotasi dengan@Configurable
mana saja dan dependensinya harus diautomatiskan.* Berkenaan dengan poin # 3 di atas, saya menyadari bahwa secara
org.springframework.boot:spring-boot-starter-aop
transitif menarikspring-aop
(seperti yang ditunjukkan di sini mavencentral ) tetapi, dalam kasus saya Eclipse gagal menyelesaikan@EnableSpringConfigured
anotasi karenanya, mengapa saya secara eksplisit menambahkanspring-aop
ketergantungan selain starter. Jika Anda menghadapi masalah yang sama, cukup nyatakan ketergantungan atau pergilah mencari tahuorg.springframework.context.annotation.aspect.*
tidak tersedia?sumber