@Value () 메소드를 통해 구성 정보를 객체의 변수에 주입하는 법을 배웠습니다. 객체가 스프링으로 호스팅되기 때문입니다. 정적 메소드에서 구성 파일의 값을 사용해야하는 경우 어떻게해야합니까?
전통적인 잘못된 관행
application.properties
spring.redis.host = 테스트
@ComponentPublic 클래스 RedissErviceImpl은 RedissErvice {... @Value ( "$ {spring.redis.host}") 정적 공개 문자열 호스트를 구현합니다. @Value ( "$ {spring.redis.port}") 정적 공개 정수 포트; ... 정적 public jedispool getJedispool () {if (redisserviceimpl.host == null) {logger.info ( "호스트가 주입되지 않음"); }}콘솔 인쇄 : "호스트가 주입되지 않았습니다
올바른 방법
@ComponentPublic 클래스 RedissErviceImpl은 RedissErvice {... 정적 공개 문자열 호스트를 구현합니다. 정적 공개 정수 포트; @Value ( "$ {spring.redis.host}") public void sethost (문자열 호스트) {redisserviceimpl.host = host; } @Value ( "$ {spring.redis.port}") public void setport (정수 포트) {redisserviceimpl.port = port; } ... 정적 공개 jedispool getJedispool () {if (redisserviceimpl.host == null) {logger.info ( "호스트가 주입되지 않음"); } else {logger.info ( "호스트 값은" + redisserviceimpl.host); }}콘솔은 주입 된 값을 올바르게 인쇄합니다.
추측을 일으킨다
spring 구성 요소를 스캔합니다. @Component 만나면 객체 RedisServiceImpl 초기화됩니다. 초기화 과정에서 @Value 주석이 스캔되고 값이 메소드에 주입됩니다.
다음으로,이 방법은 값을 RedisServiceImpl 클래스로 전달하므로 RedisServiceImpl 값인 양수 솔루션을 갖습니다.
@Value(), 가 정적 개인 변수에 직접 추가되면 객체를 초기화 할 때 정적 개인 변수가 클래스에 속하므로 스프링은 클래스에서 작동하지 않습니다. 오류입니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.