Wir haben gelernt, Konfigurationsinformationen in die Variablen des Objekts über die @Value () -Methode zu injizieren. Dies liegt daran, dass das Objekt im Frühling gehostet wird. Was sollten wir also tun, wenn wir die Werte in der Konfigurationsdatei in einer statischen Methode verwenden müssen?
Traditionelle falsche Praktiken
application.Properties
Spring.Redis.Host = Test
@ComponentPublic Class RedisServiceImpl implementiert RedisService {... @Value ("$ {spring.redis.host}") statischer öffentlicher String -Host; @Value ("$ {spring.redis.port}") statischer öffentlicher Ganzzahl Port; ... statische öffentliche Jedispool getJedispool () {if (reverserviceImpl.host == null) {logger.info ("Host nicht injiziert"); }}Die Konsole druckt: "Host nicht injiziert
Der richtige Weg
@ComponentPublic Class RedisServiceImpl implementiert RedisService {... statischer öffentlicher String -Host; statischer öffentlicher ganzzahliger Hafen; @Value ("$ {spring.redis.host}") public void Sethost (String -Host) {redisServiceImpl.host = host; } @Value ("$ {spring.redis.port}") public void setPort (Integer port) {redisServiceImpl.port = port; } ... statischer öffentlicher Jedispool getJedispool () {if (reverserviceImpl.host == null) {logger.info ("Host nicht injiziert"); } else {logger.info ("Host -Wert ist" + RediserviceImpl.host); }}Die Konsole druckt den injizierten Wert korrekt aus.
Ursache
spring scannt die Komponente. Bei der Begegnung bei @Component wird das RedisServiceImpl initialisiert. Während des Initialisierungsprozesses wird @Value -Annotation gescannt und der Wert in die Methode injiziert.
Als nächstes übergibt die Methode den Wert an RedisServiceImpl -Klasse, sodass RedisServiceImpl einen Wert hat-die positive Lösung.
Wenn @Value(), direkt zur statischen privaten Variablen hinzugefügt wird, arbeitet bei der Initialisierung des Objekts nicht in der Klasse, da die statische private Variable zur Klasse gehört - ein Fehler.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.