Мы научились вводить информацию о конфигурации в переменные объекта через метод @Value (). Это потому, что объект размещен к весне. Итак, что мы должны делать, если нам нужно использовать значения в файле конфигурации в статическом методе?
Традиционные неправильные практики
Application.properties
Spring.redis.host = тест
@Componentpublic class redisserviceimpl реализует redisservice {... @value ("$ {spring.redis.host}") Статический публичный хост; @Value ("$ {Spring.redis.port}") статический публичный целочисленный порт; ... статический публичный jedispool getjedispool () {if (sedisserviceimpl.host == null) {logger.info («хост не вводится»); }}Консоль печатает: «Хост не вводится
Правильный путь
@Componentpublic class rediSserviceImpl реализует rediSservice {... статический открытый строковый хост; статический публичный целочисленный порт; @Value ("$ {spring.redis.host}") public void sethost (string host) {surdesserviceimpl.host = host; } @Value ("$ {spring.redis.port}") public void setport (integer port) {surdessErviceImpl.port = port; } ... статический публичный jedispool getjedispool () {if (sedisserviceimpl.host == null) {logger.info ("хост не введен"); } else {logger.info ("Значение хоста - + sediSserServiceImpl.host); }}Консоль правильно печатает инъецированное значение.
Причина угадай
spring сканирует компонент. При столкновении с @Component объект RedisServiceImpl инициализируется. Во время процесса инициализации аннотация @Value сканируется, и значение вводится в метод.
Затем этот метод передает значение классу RedisServiceImpl , поэтому RedisServiceImpl имеет значение-положительное решение.
Если @Value(), добавляется непосредственно в статическую частную переменную, при инициализации объекта Spring не работает в классе, поскольку статическая частная переменная принадлежит классу - ошибка.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.