Рубрики
Без рубрики

Как внедрить значение свойства в класс, не управляемый весной?

Узнайте, как инициализировать значения свойств в классах Java без прямого использования механизма инъекций Spring.

Автор оригинала: baeldung.

1. Обзор

По дизайну классы аннотированы @Repository, @Service, @Controller , и т.д. управляются весна и инъекционные конфигурации есть легко и естественно. Что не так просто, так это переходя конфигурации к классам, которые непосредственно не управляются Spring.

В таком случае, мы можем использовать Класс Загрузчик- на основе загрузки конфигурации или просто мгновенного воспроизведения наших классов в другой фасоли и установить необходимые парамы вручную – это предлагаемый вариант, потому что конфигурация записей не должны храниться в В.свойства файлы исключительно.

В этой быстрой статье мы будем освещать тему загрузки В.свойства файлы с Java Класс Загрузчик а также инъекция уже загруженная конфигурация к весеннему в неуправляемый класс.

2. Конфигурация нагрузки с погрузчиком класса

Проще говоря, В.свойства файлы ресурсов файлов, держащих некоторые config информации. Вместо сторонних реализаций, которые поддерживают автоматическую загрузку конфигурации приложения, например, реализованную весной, мы можем использовать Java- Класс Загрузчик сделать то же самое.

Мы создадим контейнерный объект, который будет Недвижимость определены в ресурсFileName . Для заполнения контейнера конфигурацией мы будем использовать Класс Загрузчик .

Давайте определим СвойстваЗагрузчик класс, который реализует loadProperties (String resourceFileName) метод:

public class PropertiesLoader {

    public static Properties loadProperties(String resourceFileName) throws IOException {
        Properties configuration = new Properties();
        InputStream inputStream = PropertiesLoader.class
          .getClassLoader()
          .getResourceAsStream(resourceFileName);
        configuration.load(inputStream);
        inputStream.close();
        return configuration;
    }
}

Каждый Класс объект содержит ссылку на Класс Загрузчик , что мгновенно его; это объект, который в первую очередь отвечает за загрузку классов, но в этом учебнике мы будем использовать его для загрузки файла ресурсов вместо обычного класса Java. Класс Загрузчик ищет ресурсFileName на классной симпатии.

После этого мы загружаем файл ресурса в ВходНая трансляция через getResourceAsStream API.

В приведенном выше примере мы определили контейнер конфигурации, который может ресурсFileName с помощью загрузка (InputStream) API.

Метод загрузки реализует разбор В.свойства файлы с поддержкой “:” или “=” символов в качестве делимитаторов. Кроме того, оба “#” или “!” символы, используемые в начале новой строки, являются маркерами комментариев и вызывают игнорирование этой строки.

Наконец, давайте прочитаем точное значение определенной записи конфигурации из наших файлов конфигурации:

String property = configuration.getProperty(key);

3. Конфигурация загрузки с весны

Второе решение заключается в использовании функции Spring Spring для обработки некоторых низкоуровневых нагрузок и обработки файлов.

Давайте определим Инициализатор которая будет удерживать конфигурацию, необходимую для инициализации нашего пользовательского класса. Во время Бин инициализация, фреймвас будет загружать все поля, аннотированные @Value из В.свойства файл конфига:

@Component
public class Initializer {

    private String someInitialValue;
    private String anotherManagedValue;

    public Initializer(
      @Value("someInitialValue") String someInitialValue,
      @Value("anotherValue") String anotherManagedValue) {
 
        this.someInitialValue = someInitialValue;
        this.anotherManagedValue = anotherManagedValue;
    }

    public ClassNotManagedBySpring initClass() {
        return new ClassNotManagedBySpring(
          this.someInitialValue, this.anotherManagedValue);
    }
}

Инициализатор теперь может нести ответственность за мгновенное ClassNotManagedBySpring .

Теперь мы просто получить доступ к нашим Инициализатор экземпляр и запустить initClass () метод на нем, чтобы справиться с мгновенной нашей пользовательской ClassNotManagedBySpring :

ClassNotManagedBySpring classNotManagedBySpring = initializer.initClass();

Как только у нас будет ссылка на Инициализатор , мы сможем мгновенно наши пользовательские ClassNotManagedBySpring.

4. Резюме

В этом быстром учебнике мы сосредоточились на чтении свойств в классе Non-Spring Java.

Как всегда, пример реализации можно найти более на GitHub .