2010-11-10 7 views
13

के लिए एक सेटटर प्रदान करना चाहिए, मैं अपने प्रोजेक्ट के साथ स्प्रिंग 3.0.x का उपयोग कर रहा हूं। @Autowired साथ मेरे वर्तमान अभ्यास के रूप में इस मिसाल मिलती है:क्या मुझे @Autowired

 

@Autowired 
private SomeType someMemberVariable; 
 

एक सेटर विधि के उपयोग को बेहतर और/या पसंद किया है? सेटर करके, मेरा मतलब है निम्नलिखित:

 

private SomeType someMemberVariable; 

@Autowired 
private void setSomeMemberVariable(SomeType newValue) 
{ 
    someMemberVariable = newValue; 
} 
 

मैं अपरिवर्तनीय setters बनाम परिवर्तनशील समझता हूं कि यह प्रश्न के लिए क्षेत्र से बाहर है।

उत्तर

15

@Autowired का उपयोग करते समय मैं एक सेटर का उपयोग नहीं कर रहा हूं - यह बॉयलरप्लेट कोड जोड़ता है।

जब भी मुझे यूनिट परीक्षण में निर्भरता सेट करने की आवश्यकता होती है, तो मैं ReflectionTestUtils.setField(..) का उपयोग करता हूं - यह एक सेटटर के रूप में संकलित-समय सुरक्षित नहीं है, लेकिन मुझे इसके साथ बहुत परेशानी नहीं है।

एक sidenote के रूप, वसंत 3.0 का उपयोग कर, तो आप का उपयोग कर @Inject@Autowired के बजाय

+1

मुझे लगता है कि @Inject केवल जावा 6.0 और उच्चतर के लिए काम करता है शुरू कर सकते हैं। यदि अभी भी जावा 5.0 का उपयोग कर रहा है (शायद क्योंकि आप WAS 6.1 का उपयोग कर रहे हैं), @Autowired जाने का तरीका है। – DwB

+0

@ इंजेक्ट काम करेगा यदि आपके पास क्लासपाथ पर है। आप इसे यहां से प्राप्त कर सकते हैं https://code.google.com/p/atinject/ मैं इसे टॉमकैट पर उपयोग कर रहा हूं। – Bozho

+0

'@ ऑटोटेयर 'पर' इंजेक्ट' क्यों करें? कोई संदर्भ? – DerekY

16

मैं सेटर्स और गेटर्स का उपयोग करना पसंद करता हूं क्योंकि यह आपको ऑब्जेक्ट को मैन्युअल रूप से तार करने की अनुमति देता है जब आप इसे स्प्रिंग संदर्भ में नहीं चला रहे हैं (यानी, एक इकाई परीक्षण में मोक्स सेट करना)।

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