Saya ingin tahu tentang bagaimana injeksi pegas menangani metode panggilan dengan @Bean
anotasi. Jika saya meletakkan @Bean
anotasi pada sebuah metode, dan mengembalikan sebuah instance, saya mengerti bahwa itu memberitahu spring untuk membuat bean dengan memanggil metode tersebut dan mendapatkan instance yang dikembalikan. Namun, terkadang kacang itu harus digunakan untuk mengirim kacang lain atau membuat kode lain. Cara yang biasa dilakukan adalah dengan memanggil @Bean
metode beranotasi untuk mendapatkan sebuah instance. Pertanyaan saya adalah, mengapa ini tidak menyebabkan ada beberapa contoh kacang yang beredar?
Misalnya lihat kode di bawah ini (diambil dari pertanyaan lain). The entryPoint()
Metode dijelaskan dengan @Bean
, jadi saya akan membayangkan musim semi akan membuat contoh baru dari BasicAuthenticationEntryPoint
sebagai kacang. Kemudian, kami memanggil entryPoint()
lagi di blok konfigurasi, tetapi sepertinya entryPoint()
mengembalikan instance kacang, dan tidak dipanggil beberapa kali (saya mencoba masuk, dan hanya mendapat satu entri log). Secara potensial kita bisa memanggil entryPoint()
beberapa kali di bagian lain dari konfigurasi, dan kita akan selalu mendapatkan contoh yang sama. Apakah pemahaman saya tentang ini benar? Apakah musim semi melakukan beberapa metode penulisan ulang ajaib yang dianotasi @Bean
?
@Bean
public BasicAuthenticationEntryPoint entryPoint() {
BasicAuthenticationEntryPoint basicAuthEntryPoint = new BasicAuthenticationEntryPoint();
basicAuthEntryPoint.setRealmName("My Realm");
return basicAuthEntryPoint;
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.exceptionHandling()
.authenticationEntryPoint(entryPoint())
.and()
.authorizeUrls()
.anyRequest().authenticated()
.and()
.httpBasic();
}
@Bean
dan@Primary
).