मैं इस बारे में उत्सुक हूं कि स्प्रिंग इंजेक्शन कैसे @Bean
एनोटेशन के साथ कॉलिंग विधियों को संभालता है । यदि मैं @Bean
एक विधि पर एक एनोटेशन डालता हूं , और एक उदाहरण देता हूं, तो मैं समझता हूं कि यह स्प्रिंग को विधि को कॉल करके और रिटर्न किए गए इंस्टेंस को प्राप्त करने के लिए बनाता है। हालांकि, कभी-कभी उस सेम को अन्य सेम या सेटअप अन्य कोड को वायर करने के लिए उपयोग करना पड़ता है। सामान्य तरीका यह है @Bean
कि एक उदाहरण प्राप्त करने के लिए एनोटेट विधि को कॉल करें । मेरा सवाल यह है कि यह क्यों नहीं है कि बीन के कई उदाहरण सामने आ रहे हैं?
उदाहरण के लिए, नीचे दिया गया कोड देखें (दूसरे प्रश्न से लिया गया)। entryPoint()
विधि के साथ टिप्पणी की जाती है @Bean
, तो मैं सोच भी वसंत का एक नया उदाहरण बनाएगा होगा BasicAuthenticationEntryPoint
एक सेम के रूप में। फिर, हम entryPoint()
फिर से कॉन्फ़िगर ब्लॉक में कॉल करते हैं, लेकिन ऐसा लगता entryPoint()
है कि बीन का रिटर्न देता है, और इसे कई बार नहीं कहा जाता है (मैंने लॉगिंग की कोशिश की, और केवल एक लॉग एंट्री मिली)। संभावित रूप से हम 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
।