ฉันอยากรู้ว่าการฉีดสปริงจัดการกับวิธีการโทรด้วย@Bean
คำอธิบายประกอบอย่างไร ถ้าฉันใส่@Bean
คำอธิบายประกอบในเมธอดและส่งคืนอินสแตนซ์ฉันเข้าใจว่าสิ่งนั้นบอกให้สปริงสร้าง bean โดยเรียกใช้เมธอดและรับอินสแตนซ์ที่ส่งคืน อย่างไรก็ตามบางครั้งถั่วนั้นจะต้องใช้ในการต่อสายถั่วอื่นหรือตั้งค่ารหัสอื่น วิธีปกติจะทำคือเรียกใช้@Bean
วิธีการใส่คำอธิบายประกอบเพื่อรับอินสแตนซ์ คำถามของฉันคือเหตุใดสิ่งนี้จึงไม่ทำให้มีหลายอินสแตนซ์ของถั่วลอยอยู่รอบ ๆ ?
ตัวอย่างเช่นดูรหัสด้านล่าง (นำมาจากคำถามอื่น) entryPoint()
วิธีการที่กำกับด้วย@Bean
ดังนั้นฉันจะคิดฤดูใบไม้ผลิที่จะสร้างตัวอย่างใหม่ของBasicAuthenticationEntryPoint
เป็นถั่ว จากนั้นเราจะเรียกentryPoint()
อีกครั้งในการกำหนดค่าบล็อก แต่ดูเหมือนว่าentryPoint()
จะส่งคืนอินสแตนซ์ bean และไม่ได้ถูกเรียกหลายครั้ง (ฉันพยายามบันทึกและได้รับรายการบันทึกเพียงรายการเดียว) เป็นไปได้ว่าเราสามารถเรียกใช้entryPoint()
หลายครั้งในส่วนอื่น ๆ ของการกำหนดค่าและเราจะได้รับอินสแตนซ์เดียวกันเสมอ ความเข้าใจของฉันถูกต้องหรือไม่? ฤดูใบไม้ผลิมีการเขียนวิธีการใหม่ที่มีคำอธิบายประกอบด้วยมนต์ขลัง@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
และ@Primary
)