Использование Google Guice для добавления свойств Java

Я хочу использовать 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 создает другие классы, в которые мне также нужно вводить свойства, и этим классам также необходимо вводить свойства, как правильно это сделать?

  1. Передать инжектор всем подклассам, а затем использовать инжектор.getInstance(...) для создания подклассов?

  2. Создать новый инжектор, например

    TestConfiguration config = new TestConfiguration();
    Инжектор-инжектор = Guice.createInjector(config);
    Тест TestImpl = инжектор.getInstance(TestImpl.class);
    

во всех вложенных классах?

  1. Есть ли другой способ сделать свойства доступными во всех классах?
16
задан malana 20 October 2017 в 09:43
поделиться