Spring 3.2 @value纯java配置的注释不起作用,但Embion.getProperty工作

2022-08-31 16:23:09

我一直在打破我的头。不知道我错过了什么。我无法让注释在纯java配置的spring应用程序(非web)中工作@Value

@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;
    }
}

属性文件只包含 Bean,如下所示: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


答案 1

在类中添加以下 Bean 声明Config

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

为了使注释正常工作,应注册注释。在 XML 中使用时会自动完成,但在使用 时应注册为 。@ValuePropertySourcesPlaceholderConfigurer<context:property-placeholder>static @Bean@Configuration

请参阅@PropertySource文档和此 Spring Framework Jira 问题


答案 2

推荐