क्या कोटलिन में निम्नलिखित कुछ करना संभव है?
@Autowired
internal var mongoTemplate: MongoTemplate
@Autowired
internal var solrClient: SolrClient
क्या कोटलिन में निम्नलिखित कुछ करना संभव है?
@Autowired
internal var mongoTemplate: MongoTemplate
@Autowired
internal var solrClient: SolrClient
जवाबों:
वसंत में डिपेंडेंसी इंजेक्शन करने के लिए अनुशंसित दृष्टिकोण निर्माणकर्ता इंजेक्शन है:
@Component
class YourBean(
private val mongoTemplate: MongoTemplate,
private val solrClient: SolrClient
) {
// code
}
वसंत से पहले 4.3 निर्माणकर्ता को स्पष्ट रूप से एनोटेट किया जाना चाहिए Autowired
:
@Component
class YourBean @Autowired constructor(
private val mongoTemplate: MongoTemplate,
private val solrClient: SolrClient
) {
// code
}
दुर्लभ मामलों में, आप फ़ील्ड इंजेक्शन का उपयोग करना पसंद कर सकते हैं, और आप इसकी मदद से कर सकते हैं lateinit
:
@Component
class YourBean {
@Autowired
private lateinit var mongoTemplate: MongoTemplate
@Autowired
private lateinit var solrClient: SolrClient
}
कंस्ट्रक्टर इंजेक्शन बीन निर्माण समय पर सभी निर्भरता की जांच करता है और सभी इंजेक्ट किए गए फ़ील्ड हैं val
, दूसरी तरफ लेटनीट इंजेक्शन इंजेक्शन केवल हो सकते हैं var
, और बहुत कम रनवे ओवरहेड होते हैं। और निर्माता के साथ वर्ग का परीक्षण करने के लिए, आपको प्रतिबिंब की आवश्यकता नहीं है।
लिंक:
@Autowired
प्राथमिक निर्माता पैरामीटर के साथ उपयोग कर सकता हूं ?
autowired
उप सेटर भी जोड़ सकते हैं ?
YourBean
में इंजेक्शन लगाता है FooBean
, जब YourBean
निर्भरता सार्वजनिक होगी (कोटलिन में डिफ़ॉल्ट संशोधक) डेवलपर ( ) YourBean
में निर्भरता का उपयोग कर सकता है । लेकिन इसकी अनुमति नहीं दी जानी चाहिए, क्योंकि निर्भरता उसका सार्वजनिक अनुबंध नहीं है, यह सिर्फ कार्यान्वयन विवरण (ज्यादातर मामलों में) है। इसके बजाय, खुद के कंस्ट्रक्टर में खुद की निर्भरता को परिभाषित करना चाहिए। FooBean
yourBean.mongoTemplate
YourBean
FooBean
हाँ, जावा एनोटेशन का समर्थन ज्यादातर जावा के रूप में कोटलिन में किया जाता है। प्राथमिक निर्माणकर्ता पर एक गोत्र एनोटेशन है, इसके लिए स्पष्ट 'कंस्ट्रक्टर' कीवर्ड की आवश्यकता होती है:
से https://kotlinlang.org/docs/reference/annotations.html
यदि आपको किसी क्लास के प्राथमिक कंस्ट्रक्टर को एनोटेट करने की आवश्यकता है, तो आपको कंस्ट्रक्टर कीवर्ड को कंस्ट्रक्टर घोषणा में जोड़ना होगा, और इससे पहले एनोटेशन जोड़ना होगा:
class Foo @Inject constructor(dependency: MyDependency) {
// ...
}