Hemos aprendido a inyectar información de configuración en las variables del objeto a través del método @Value (). Esto se debe a que el objeto está alojado por la primavera. Entonces, ¿qué debemos hacer si necesitamos usar los valores en el archivo de configuración en un método estático?
Prácticas tradicionales incorrectas
Aplicación. Properties
spring.redis.host = prueba
@ComponentPublic Class RedisServiceImpl implementa RedisService {... @Value ("$ {Spring.Redis.host}") Host de cadena pública estática; @Value ("$ {spring.redis.port}") Puerto de entero estático; ... estático público jedispool getJedispool () {if (redisServiceImpl.host == null) {logger.info ("host no inyectado"); }}Las impresiones de la consola: "Host no inyectado
El camino correcto
@ComponentPublic Class RedisServiceImpl implementa RedisService {... Static Public String Host; Puerto de enteros públicos estáticos; @Value ("$ {spring.redis.host}") public void sethost (string host) {redisServiceImpl.host = host; } @Value ("$ {spring.redis.port}") public void setport (puerto entero) {redisServiceImpl.port = port; } ... estático público jedispool getJedispool () {if (redisServiceImpl.host == null) {logger.info ("host no inyectado"); } else {logger.info ("El valor del host es" + redisserviceImpl.host); }}La consola imprime correctamente el valor inyectado.
Causar suposiciones
spring escanea el componente. Al encontrar @Component , el objeto RedisServiceImpl se inicializa. Durante el proceso de inicialización, @Value se escanea y el valor se inyecta en el método.
A continuación, el método pasa el valor a RedisServiceImpl , por lo que RedisServiceImpl tiene un valor: la solución positiva.
Si @Value(), se agrega directamente a la variable privada estática, al inicializar el objeto, Spring no funciona en la clase porque la variable privada estática pertenece a la clase, un error.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.