हाँ, वह सुरक्षित धागा रूप में लंबे समय के रूप में यह एक प्रोटोटाइप गुंजाइश सेम रूप में घोषित किया जाता है, और आप एक init()
विधि है कि वसंत से पुकारा जाता है बनाने की जरूरत:
@PostConstruct
public void init() {
listOfItem = context.getListOfItem();
}
अनुरोध कॉन्टेक्स्ट केवल एक थ्रेड (अनुरोध को संभालने के लिए आवंटित एक) से ही सुलभ है, कन्स्ट्रक्टर ऑब्जेक्ट के निर्माण की प्रकृति की प्रकृति द्वारा फिर से प्रवेश नहीं कर रहा है।
सावधान listOfItem
किसी भी तरह हालांकि reentrancy समस्याओं से सुरक्षित किया जा रहा है के साथ इस भ्रमित करने के लिए नहीं हो सकता है, सिर्फ इसलिए कि यह MyMapper
वस्तु में नीचे बंद कर दिया है एक गेटर द्वारा साझा किए जाने से यह बंद नहीं होता, अगर एक उपलब्ध थे (वहाँ isn ' आपके मामले में टी)। मैं यह भी देखता हूं कि यह एक अमूर्त वर्ग है, लेकिन listOfItem
निजी है, इसलिए उप-वर्गों तक इसका उपयोग नहीं होगा। उस सूची के किसी भी लीक किए गए संदर्भ को समवर्ती धागे द्वारा छेड़छाड़ की जा सकती है, संदर्भ के किसी भी प्रतियां होने के कारण (List
एस जावा में उत्परिवर्तनीय हैं)।
चूंकि यह सुरक्षा आपका इरादा है, एक इकाई परीक्षण बनाएं जो फ़ील्ड की दृश्यता की जांच करता है और यदि प्रतिबिंब के माध्यम से फ़ील्ड तक पहुंचने में विफल रहता है तो उचित अपवाद नहीं फेंकता है। फ़ील्ड थ्रेड सुरक्षित है यह इंगित करने के लिए आप अपने आंतरिक मार्कर एनोटेशन के साथ फ़ील्ड पर भी टिप्पणी करना चाह सकते हैं। यह दस्तावेज़ीकरण, और एक एनोटेशन के रूप में, संभावित भावी स्वचालन (जैसे परीक्षण आधार जो सभी एनोटेशन की तलाश कर सकता है और प्रतिबिंब परीक्षण स्वचालित रूप से चला सकता है) के साथ मदद करता है।
यह बहुत साफ दिखता है! अच्छा काम करते रहें।
स्रोत
2015-04-27 13:21:10
एचएम लेकिन ऑटोवॉयरिंग होने पर संदर्भ शून्य नहीं है? – hudi
हां, यह सही है, मैं अपना जवाब अपडेट करूंगा। (मैं पिछले कुछ सालों से स्कैला कर रहा हूं ...) –
यदि वसंत द्वारा इनिट विधि को बुलाया जाता है, तो क्या यह एक ही समस्या को नहीं दबाएगा? या आप सुझाव दे रहे हैं कि कक्षा सिंगलटन गुंजाइश में नहीं होनी चाहिए? – eis