Nous avons appris à injecter des informations de configuration dans les variables de l'objet via la méthode @Value (). En effet, l'objet est hébergé par le printemps. Alors, que devons-nous faire si nous devons utiliser les valeurs dans le fichier de configuration dans une méthode statique?
Pratiques erronées traditionnelles
application.properties
Spring.redis.host = Test
@ComponentPublic class redesserviceIMPl implémente Redessice {... @Value ("$ {printemps.redis.host}") Hôte de chaîne publique statique; @Value ("$ {printemps.redis.port}") Port entier public statique; ... publique statique jedispool getjeDispool () {if (redesserviceImpl.host == null) {logger.info ("hôte non injecté"); }}La console imprime: "Hôte non injecté
La bonne façon
@ComponentPublic Class RedisServiceIMPL implémente Redesservice {... Static Public String Host; port entier public statique; @Value ("$ {printemps.redis.host}") public void sethost (string host) {redesserviceImpl.host = host; } @Value ("$ {printemps.redis.port}") public void setport (port entier) {redesserviceImpl.port = port; } ... publique statique Jedispool getjeDispool () {if (redesserviceImpl.host == null) {logger.info ("hôte non injecté"); } else {Logger.info ("La valeur hôte est" + redesserviceImpl.host); }}La console imprime correctement la valeur injectée.
Faire deviner
spring scanne le composant. Lors de la rencontre @Component , l'objet RedisServiceImpl est initialisé. Pendant le processus d'initialisation, @Value est analysée et la valeur est injectée dans la méthode.
Ensuite, la méthode transmet la valeur à RedisServiceImpl , donc RedisServiceImpl a une valeur - la solution positive.
Si @Value(), est ajouté directement à la variable privée statique, lors de l'initialisation de l'objet, Spring ne fonctionne pas sur la classe car la variable privée statique appartient à la classe - une erreur.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.