bestsource

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

bestsource 2023. 8. 22. 22:17
반응형

순수 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

반응형