잘못된 이유는 주로 @Value 사용 시 주의 사항에 주의하기 때문입니다.
1 정적 변수에는 사용할 수 없습니다.
2. 상수(최종)에 작용할 수 없습니다.
3. 등록되지 않은 클래스에서는 사용할 수 없습니다(@Component, @Configuration 등을 사용해야 함). 이 속성이 있는 클래스를 사용하면 @ Autowired 메서드만 사용할 수 있으며 새 메서드는 이러한 구성을 자동으로 주입하지 않습니다.
springboot 시작 프로세스에는 다음과 같은 두 가지 중요한 프로세스가 있습니다.
1 컨테이너의 Bean을 스캔하고 구문 분석하여 beanFactory를 올라가는 것은 정보를 등록하는 것과 같습니다.
2. 스캔한 빈을 인스턴스화하고 초기화합니다.
@Value는 두 번째 단계에서 구문 분석됩니다. BeanPostProcessor는 사용자가 Bean 초기화 전후에 Bean에서 작동할 수 있는 인터페이스 메소드를 정의합니다. Javadoc에서 말하는 것처럼 중요한 구현 클래스 중 하나인 AutowiredAnnotationBeanPostProcessor는 Bean에서 @Autowired 및 @Value 주석의 주입 기능을 지원합니다.
resource.test.imageServer=http://image.everest.com
1. 첫 번째@Configuration
public class EverestConfig {
@Value("${resource.test.imageServer}")
private String imageServer;
public String getImageServer() {
return imageServer;
}
}
@Component @ConfigurationProperties(prefix = "resource.test") public class TestUtil { public String imageServer; public String getImageServer() { return imageServer; } public void setImageServer(String imageServer) { this.imageServer = imageServer; } }
그런 다음 필요한 곳에 주입합니다.
@Autowired private TestUtil testUtil; @Autowired private EverestConfig everestConfig; @GetMapping("getImageServer") public String getImageServer() { return testUtil.getImageServer(); // return everestConfig.getImageServer(); }
@Value는 application.properties에서 구성을 가져옵니다. Null
@Value("${spring.datasource.url}") private String url;
값은 NULL입니다.
툴 클래스(DBUtils) 객체를 생성할 때 새로운 메소드를 사용하지 말고, springboot에서 관리할 수 있도록 @Autowired 메소드를 사용하세요. 툴 클래스에 @Component를 추가하고, 정의된 속성에 static을 추가하지 마세요. 변수.
@Autowired private DBUtils jdbc; @Component public class DBUtils{ @Value("${spring.datasource.url}") private String url; }
위 내용은 SpringBoot의 @Value로 인해 application.properties 구성이 잘못되었습니다. 해결 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!