programing

순수한 Java 구성을 사용하는 Spring 3.2 @value 주석은 작동하지 않지만 Environment.getProperty는 작동합니다.

nicescript 2021. 1. 14. 08:07
반응형

순수한 Java 구성을 사용하는 Spring 3.2 @value 주석은 작동하지 않지만 Environment.getProperty는 작동합니다.


나는 이것에 대해 내 머리를 부러 뜨렸다. 내가 무엇을 놓치고 있는지 잘 모르겠습니다. @Value순수한 Java 구성 스프링 앱 (웹이 아님)에서 작동 하도록 주석 을 가져올 수 없습니다.

@Configuration
@PropertySource("classpath:app.properties")
public class Config {
    @Value("${my.prop}") 
    String name;

    @Autowired
    Environment env;

    @Bean(name = "myBean", initMethod = "print")
    public MyBean getMyBean(){
         MyBean myBean = new MyBean();
         myBean.setName(name);
         System.out.println(env.getProperty("my.prop"));
         return myBean;
    }
}

속성 파일에는 my.prop=avalue다음과 같은 빈이 포함 됩니다.

public class MyBean {
    String name;
    public void print() {
        System.out.println("Name: " + name);
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

환경 변수는 값을 제대로 인쇄하지만 인쇄 @Value하지 않습니다.
avalue
Name: ${my.prop}

메인 클래스는 컨텍스트를 초기화합니다.

AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(Config.class);

그러나 내가 사용하면

@ImportResource("classpath:property-config.xml")

이 스 니펫으로

<context:property-placeholder location="app.properties" />

그러면 잘 작동합니다. 물론 이제 환경이 반환 null됩니다.


Config클래스 에 다음 빈 선언을 추가하십시오.

@Bean
public static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() {
    return new PropertySourcesPlaceholderConfigurer();
}

위해서는 @Value작업에 주석을 PropertySourcesPlaceholderConfigurer등록해야합니다. 그것은 사용할 때 자동으로 수행됩니다 <context:property-placeholder>XML에 있지만로 등록해야 static @Bean사용할 때 @Configuration.

@PropertySource 문서 및이 Spring Framework Jira 문제를 참조하십시오 .

참조 URL : https://stackoverflow.com/questions/17097521/spring-3-2-value-annotation-with-pure-java-configuration-does-not-work-but-env

반응형