मैं एक वर्ग कि इतने तरह दिखता है:स्प्रिंग एक स्थिर इंजेक्शन (वैश्विक) सिंगलटन
public class Configurator {
private static Configurator INSTANCE = null;
private int maxRange = 1;
// many other properties; each property has a default value
private static synchronized Configurator getInstance() {
if(INSTANCE == null)
return new Configurator();
return INSTANCE;
}
public static int getMaxRange() {
getInstance().maxRange;
}
public static void setMaxRange(int range) {
getInstance().maxRange = range;
}
// Getters and setters for all properties follow this pattern
}
यह एक वैश्विक विन्यास वस्तु एप्लिकेशन स्टार्टअप पर सेट किया जा सकता है, और फिर वर्गों के दर्जनों द्वारा प्रयोग किया जाता है के रूप में कार्य करता है परियोजना भर में:
// Called at app startup to configure everything
public class AppRunner {
Configurator.setMaxRange(30);
}
// Example of Configurator being used by another class
public class WidgetFactory {
public void doSomething() {
if(Configurator.getMaxRange() < 50)
// do A
else
// do B
}
}
अब मैं एक स्प्रिंग परियोजना में इस कोड का आयात कर रहा हूँ, और मेरे Sprinig एक्सएमएल (बीन्स) कॉन्फ़िगर करने के लिए कोशिश कर रहा हूँ।
<bean id="configurator" class="com.me.myapp.Configurator" scope="singleton">
<property name="maxRange" value="30"/>
<!-- etc., for all properties -->
</bean>
इस तरह, जब WidgetFactory#doSomething
कार्यान्वित, वसंत पहले से ही होगा Configurator
वर्ग भरी हुई है और यह समय से आगे के लिए कॉन्फ़िगर: मेरा अनुमान है कि मैं एक अकेला Configurator
सेम की तरह तो (या कुछ इसी तरह) को परिभाषित कर सकता है।
क्या यह मेरे लिए scope="singleton"
सेट करना सही है, या इससे कोई फर्क नहीं पड़ता? क्या मैं स्थिर गुणों को सही ढंग से सेट कर रहा हूं? क्या मुझे कुछ और करने की ज़रूरत है या यहां पर विचार करें? अग्रिम में धन्यवाद।
धन्यवाद @partlov (+1) - क्या मुझे अपनी 'getInstance()' विधि सार्वजनिक करने की आवश्यकता होगी, या क्या वसंत इस तथ्य को संभाल सकता है कि यह निजी है? –
आपको इसकी आवश्यकता नहीं है (getInstance()) –