Я хочу использовать google guice, чтобы сделать свойства доступными во всех классах моего приложения. Я определил модуль, который загружает и связывает файл свойств Test.properties.
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 создает другие классы, где мне также нужно вводить свойства, и эти классы также должны вводить свойства, что является правильным способом для этого?
-
Передайте инжектор во все подклассы, а затем используйте инжектор .getInstance(...) для создания подклассов?
-
Включить новый инжектор, например
TestConfiguration config = new TestConfiguration(); Injector injector = Guice.createInjector(config); TestImpl test = injector.getInstance(TestImpl.class);
во всех вложенных классах?
- Есть ли другой подход, чтобы сделать свойства доступными во всех классах?