2010-11-15 15 views
5

एक और question में मैंने पूछा, एक चिंता उठाई है कि वसंत ढांचा सुरक्षित नहीं है। क्या यह सच है, या तय है, और क्या आप एक उदाहरण दे सकते हैं जिसका अर्थ वास्तव में है?वसंत ढांचा 3.0 प्रकार-सुरक्षित

+0

यह प्रश्न अधिक उपयोगी होगा यदि आप टाइप-सुरक्षित, जो आप अपने डी ढांचे में खोज रहे हैं, बेहतर तरीके से परिभाषित किया गया है –

+0

@matt b - उन्होंने इस सवाल से पूछा था ('क्या है टाइप-सेफ ') उस व्यक्ति को जो कहता है कि वसंत लिंक सुरक्षित प्रश्न में सुरक्षित नहीं है। लेकिन एक जवाब प्राप्त नहीं हुआ, इसलिए यह सवाल। – Bozho

+0

आह मैं देखता हूं, अब और अधिक समझ में आता है। मैंने अपना डाउनवोट हटा दिया है –

उत्तर

7

सबसे पहले, एक निर्भरता इंजेक्शन ढांचे के लिए "टाइप-सेफ" का क्या अर्थ है। मैं क्या सोच सकता हूं कि आप एक प्रकार निर्दिष्ट करके संदर्भ से एक बीन प्राप्त कर सकते हैं, न सिर्फ एक बीन नाम। वसंत 3 यह अनुमति देता है।

अन्यथा, प्रकार-सुरक्षा का अर्थ है कि जब आप अपनी निर्भरताओं को उनके प्रकार से परिभाषित कर सकते हैं। और आप वसंत के सभी संस्करणों में ऐसा कर सकते हैं।

एक और चीज संकलन-समय सुरक्षा है। वसंत पूर्व-3.0 के साथ जब आपको दो बीन्स के बीच अंतर करना होता था जो उनके स्ट्रिंग-आधारित नाम का उपयोग करके समान इंटरफ़ेस (या सुपरटेप) साझा करते थे। वसंत 3.0 में आप एनोटेशन-आधारित क्वालीफायर का उपयोग कर सकते हैं (javax.inject.Qualifier का उपयोग करके), इसलिए यह संकलित-समय भी सुरक्षित है।

जेनिक्स का उपयोग करने का एक और बात उल्लेख करना है। आप वसंत में उदाहरण के लिए @Inject List<MyService> कर सकते हैं।

1

यह इस बात पर निर्भर करता है कि आप इसका उपयोग कैसे करते हैं और टाइप-सुरक्षित द्वारा आपका क्या मतलब है (बाद में अधिक जानकारी के लिए बोझो का उत्तर देखें): यदि आप अपने बीन्स का उत्पादन करने के लिए एक्सएमएल कॉन्फ़िगरेशन का उपयोग करते हैं, तो आप शायद टाइप-सुरक्षित हैं स्टार्ट-अप के बाद।

हालांकि, यदि आप नई जावा बीन कॉन्फ़िगरेशन (जिसकी अपनी सीमाएं हैं) का उपयोग करते हैं तो आपको संकलन-समय सुरक्षा मिलती है।

मैं पूर्व में उत्तराधिकारी की वकालत नहीं कर रहा हूं, लेकिन यह विचार करने के लिए कुछ है।

2

नाम निर्दिष्ट किए बिना @Qualifier

का उपयोग कर इंजेक्शन सेम की पहचान करने के लिए एक कस्टम एनोटेशन को परिभाषित करें, हम एक कस्टम एनोटेशन बनाना होगा। यह सीडीआई में जेएसआर 330 एनोटेशन (इंजेक्ट) के उपयोग के लिए एक समान प्रक्रिया है।

@Target({ElementType.Field, ElementType.Parameter}) 
@Retention(RetentionPolicy.RUNTIME) 
@Qualifier 
public @Interface Student { 
} 

अब EntityDao इंटरफ़ेस के कार्यान्वयन के लिए इस कस्टम एनोटेशन आवंटित

@Component 
@Student 
public class StudentDao implements EntityDao { 
} 

@Component स्प्रिंग बताती है कि यह एक सेम परिभाषा। @ स्टूडेंट आईओसी द्वारा स्टूडेंट आईओसी द्वारा एंटिटीडाओ के कार्यान्वयन के संदर्भ में छात्रदाओ को एंटिटीडाओ के कार्यान्वयन के रूप में पहचानने के लिए उपयोग किया जाता है। @Autowired और कस्टम क्वालीफायर का उपयोग कर बीन इंजेक्ट करें इस तरह कुछ।

@Autowired 
@Student 
private EntityDao studentDao; // So the spring injects the instance of StudentDao here. 

इस स्ट्रिंग-नाम है, जो गलत वर्तनी किया जा सकता है और कठिन बनाए रखने के लिए कर रहे हैं के कम उपयोग करता है। - मुझे यह पोस्ट बहुत उपयोगी लगता है। http://www.coolcoder.in/2011/08/how-to-use-type-safe-dependency.html

संबंधित मुद्दे