Aprendemos a injetar informações de configuração nas variáveis do objeto através do método @Value (). Isso ocorre porque o objeto é hospedado pela primavera. Então, o que devemos fazer se precisarmos usar os valores no arquivo de configuração em um método estático?
Práticas incorretas tradicionais
Application.Properties
spring.redis.host = teste
@ComPonentPublic Classe redisServiceImpl implementa redisservie {... @value ("$ {spring.redis.host}") estático public string host; @Value ("$ {spring.redis.port}") estática pública port; ... public estático jedispool getjedispool () {if (redisServiceImpl.host == null) {logger.info ("host não injetado"); }}O console impressa: "Host não injetado
A maneira correta
@ComPonentPublic Class redisServiceImpl implementa RedisService {... Host estático de string public; porta inteira pública estática; @Value ("$ {spring.redis.host}") public void sethost (string host) {redisServiceImpl.host = host; } @Value ("$ {spring.redis.port}") public void SetPort (porta inteira) {redisServiceImpl.port = port; } ... public estático jedispool getjedispool () {if (redisServiceImpl.host == null) {logger.info ("host não injetado"); } else {Logger.info ("O valor do host é" + redissserviceImpl.host); }}O console imprime corretamente o valor injetado.
Porque palpite
spring digitaliza o componente. Ao encontrar @Component , o objeto RedisServiceImpl é inicializado. Durante o processo de inicialização, @Value é digitalizada e o valor é injetado no método.
Em seguida, o método passa o valor para RedisServiceImpl ; portanto, RedisServiceImpl tem um valor-a solução positiva.
Se @Value(), for adicionado diretamente à variável privada estática, ao inicializar o objeto, a mola não opera na classe porque a variável privada estática pertence à classe - um erro.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.