@value()メソッドを介して、オブジェクトの変数に構成情報を注入することを学びました。これは、オブジェクトが春にホストされているためです。では、静的メソッドで構成ファイルの値を使用する必要がある場合はどうすればよいですか?
伝統的な間違った慣行
Application.Properties
spring.redis.host =テスト
@componentPublic class redisserviceImpl redisservice {... @value( "$ {spring.redis.host}")static public string host; @value( "$ {spring.redis.port}")静的パブリック整数ポート; ... static public jedispool getjedispool(){if(redisserviceimpl.host == null){logger.info( "estunt not josted"); }}コンソール印刷:「ホストは注入されていません
正しい方法
@componentPublic class redisserviceImpl redisservice {... static public string host;静的パブリック整数ポート。 @value( "$ {spring.redis.host}")public void sethost(string host){redisserviceimpl.host = host; } @value( "$ {spring.redis.port}")public void setport(integer port){redisserviceimpl.port = port; } ... static public jedispool getjedispool(){if(redisserviceimpl.host == null){logger.info( "host not injected"); } else {logger.info( "ホスト値は" + redisserviceimpl.host); }}コンソールは、注入された値を正しく印刷します。
推測を引き起こします
springコンポーネントをスキャンします。 @Componentに遭遇すると、オブジェクトRedisServiceImpl初期化されます。初期化プロセス中、 @Valueアノテーションがスキャンされ、値がメソッドに注入されます。
次に、メソッドは値をRedisServiceImplクラスに渡すため、 RedisServiceImplには値があります - 正のソリューションがあります。
@Value(),が静的なプライベート変数に直接追加されている場合、オブジェクトを初期化するとき、Stringはクラスで操作しません。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。