मैं जावा वेबपैप में एक उचित गुण प्रबंधन रणनीति बनाना चाहता हूं जो कि Google guice पर डीआई फ्रेमवर्क के रूप में रहता है।Google गिइस प्रॉपर्टीज मैनेजमेंट
मैं निम्नलिखित 3 आवश्यकताओं का जवाब देने के लिए एक तंत्र करना चाहते हैं:
- मैं चाहूँगा guice (@Named) का उपयोग गुण इंजेक्षन करने में सक्षम होना
- मैं गुण उपयोग करने में सक्षम होना चाहते हैं एक स्थिर तरीके से
- तंत्र को गुणों के प्राथमिकता का समर्थन करना चाहिए, जिसका अर्थ है कि एक संपत्ति को एक निश्चित मूल्य के साथ तैनात युद्ध में लपेटा जा सकता है लेकिन यह लक्ष्य प्रणाली स्तर या स्थानीय फ़ाइल सिस्टम (लक्ष्य मशीन के) में भी अनावश्यक हो सकता है मैं तैनात करता हूं), इस तरह के मामले में युद्ध में मूल्य मूल्य वें द्वारा ओवरराइड किया जाएगा लक्ष्य मशीन में मौजूद है।
मेरा मानना है कि यह एक मानक आवश्यकता है। अब, गाइड मानक बाइंडर का उपयोग करके मैं आसानी से पहली आवश्यकता प्राप्त कर सकता हूं लेकिन अन्य दो नहीं।
- Wraps और बाध्यकारी (उन है कि गुण बांधता है) उदाहरण के लिए guice के तरीकों को उजागर करता है:
public static void bindString(AnnotatedBindingBuilder<String> binder, String property, String defaultValue) { binder.annotatedWith(Names.named(property)).toInstance(getProperty(property, defaultValue)); }
कहाँ अन्य दो प्राप्त करने के लिए मैं अपने ही वर्ग है जो निम्न करता बनाया getProperty विधि जानता है कि मेरे गुणों को कैसे प्रबंधित करें (युद्ध या सिस्टम स्तर से मूल्य प्राप्त करें) और गुणों को स्थिर रूप से भी प्रकट करता है।
तो मूल रूप से जब तक मैं इस उपयोगिता का उपयोग कर रहा हूं, जिसे मैंने गुणों के लिए बनाया है, मैं अच्छा हूं, इसमें मेरी सभी आवश्यकताओं को शामिल किया गया है, लेकिन एक बार जब मैं मानक गेज बाइंडिंग का उपयोग करता हूं तो मैं दूसरी और तीसरी आवश्यकता खो रहा हूं।
क्या गुइस बाइंडिंग को ओवरराइड करने और उन सभी 3 आवश्यकताओं को प्राप्त करने का कोई तरीका है?
एक बार मेरे पास वसंत आधारित ऐप में एक ही चुनौती थी और यह बहुत आसान था। मैं निम्नलिखित विधि के साथ ApplicationContextInitializer कार्यान्वित:
@Override public void initialize(ConfigurableWebApplicationContext ctx) { PropertySource<Map<String, Object>> localProps = null; try { localProps = new ResourcePropertySource(new ClassPathResource(LOCAL_PROPERTIES_FILE_NAME)); } catch (IOException e) { LOG.fatal("Could not load local properties from classpath " + LOCAL_PROPERTIES_FILE_NAME); return; } LOG.info("Loaded configuration from classpath local file " + LOCAL_PROPERTIES_FILE_NAME); ctx.getEnvironment().getPropertySources().addFirst(localProps); }
तो यह मुझे मेरे पर्यावरण को सर्वोच्च प्राथमिकता के साथ स्थानीय प्रॉपर्टी जोड़ने के लिए एक मार्ग प्रशस्त किया। युद्ध गुणों के साथ ओवरलैप के मामले में स्थानीय लोगों की उच्च प्राथमिकता थी। इसके अलावा मैंने अपने पर्यावरण को स्थिर रूप से उजागर किया, इसलिए मेरे पास मेरी संपत्तियों के लिए स्थिर पहुंच है (उन सेवाओं के लिए जो कंटेनर द्वारा प्रबंधित नहीं हैं, विरासत अधिकतर)।
मैं इसे गाइड के साथ कैसे प्राप्त कर सकता हूं?
आपका क्या मतलब है, कि आप एक स्थिर तरीके से गुण का उपयोग करना चाहते हैं? क्या इसका मतलब यह है कि आपके पास उपयोग-मामले हैं जहां आप किसी विशेष संपत्ति तक पहुंचना चाहते हैं, लेकिन आप तब तक नहीं जानते जब तक कि आप जिस संपत्ति को एक्सेस करना चाहते हैं? –
मैं कुछ का उपयोग कर किसी संपत्ति का उपयोग करने में सक्षम होना चाहूंगा: SomeClass.getProperty ("my.property"); यह कक्षाओं के लिए उपयोगी होना चाहिए जो कि गुइस (विरासत आमतौर पर) द्वारा प्रबंधित नहीं होते हैं और अभी भी मेरी गुणों तक पहुंच की आवश्यकता है – forhas