मैं अपने आवेदन के सभी वर्गों में गुणों को उपलब्ध कराने के लिए Google guice का उपयोग करना चाहता हूं। मैंने एक मॉड्यूल परिभाषित किया जो गुण फ़ाइल Test.properties लोड करता है और बांधता है।जावा गुणों को इंजेक्ट करने के लिए Google Guice का उपयोग
Property1=TEST
Property2=25
पैकेज com.test;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Properties;
import com.google.inject.AbstractModule;
import com.google.inject.name.Names;
public class TestConfiguration extends AbstractModule {
@Override
protected void configure() {
Properties properties = new Properties();
try {
properties.load(new FileReader("Test.properties"));
Names.bindProperties(binder(), properties);
} catch (FileNotFoundException e) {
System.out.println("The configuration file Test.properties can not be found");
} catch (IOException e) {
System.out.println("I/O Exception during loading configuration");
}
}
}
मैं एक मुख्य वर्ग का उपयोग कर रहा हूं जहां मैं गुणों को इंजेक्ट करने के लिए इंजेक्टर बनाता हूं।
package com.test;
import com.google.inject.Guice;
import com.google.inject.Injector;
public class Test {
public static void main(String[] args) {
TestConfiguration config = new TestConfiguration();
Injector injector = Guice.createInjector(config);
TestImpl test = injector.getInstance(TestImpl.class);
}
}
package com.test;
import com.google.inject.Inject;
import com.google.inject.name.Named;
public class TestImpl {
private final String property1;
private final Integer property2;
@Inject
public TestImpl(@Named("Property1") String property1, @Named("Property2") Integer property2) {
System.out.println("Hello World");
this.property1 = property1;
this.property2 = property2;
System.out.println(property1);
System.out.println(property2);
}
}
अब मेरा प्रश्न। यदि मेरा testImpl अन्य वर्ग बनाता है जहां मुझे गुणों को इंजेक्ट करने की भी आवश्यकता होती है, और उन वर्गों को गुणों को इंजेक्ट करने की भी आवश्यकता होती है तो ऐसा करने का सही तरीका क्या है?
सभी उपवर्गों इंजेक्टर दर्रा और फिर injector.getInstance (...) का उपयोग उपवर्गों बनाने के लिए?
Instanciate
TestConfiguration config = new TestConfiguration(); Injector injector = Guice.createInjector(config); TestImpl test = injector.getInstance(TestImpl.class);
सभी नेस्टेड कक्षाओं में की तरह एक नया इंजेक्टर?
- वहाँ एक अन्य दृष्टिकोण गुण सभी वर्गों में उपलब्ध बनाने के लिए है?
स्थापित करना होगा वहाँ एक कारण है कि आप नए हैं, उन्हें अपने टेस्ट क्लास में इंजेक्ट करने के लिए गुइस का उपयोग करने के विरोध में मैन्युअल रूप से उन्हें डालना (जो सामान्य तरीका होगा)? – Matt
आपका मतलब है कि "टेस्ट कॉन्फ़िगरेशन कॉन्फ़िगरेशन = नया टेस्ट कॉन्फ़िगरेशन();"? क्या आप एक उदाहरण दे सकते हैं कि इसे किसी अन्य तरीके से कैसे किया जाए? – markus
@ मार्कस: नहीं, 'टेस्ट कॉन्फ़िगरेशन' नहीं ... यह 'नए' मॉड्यूल के लिए सामान्य है। सवाल 'टेस्टआईएमपीएल' के बारे में है जो अन्य वर्गों को बनाते हैं जहां आपको गुणों को इंजेक्ट करने की भी आवश्यकता होती है। आम तौर पर, आप उन अन्य वर्गों (या 'प्रदाता' की घोषणा 'टेस्टआईएमपीएल' की निर्भरताओं के रूप में घोषित करेंगे ताकि गिस उन्हें 'TestImpl' में 'नए' के साथ बनाने के बजाय उन्हें बना सके। – ColinD