Spring Boot:PropertyPlaceholderConfigurer未加载属性

时间:2016-01-14 16:09:24

标签: spring spring-boot

我是如下创建的Spring Boot应用程序,它作为Java独立进程运行

@Configuration
@ComponentScan(basePackages = {"com.abc.def.ghi"})
public class Application {

public static void main(String[] args) throws Exception {
    SpringApplication springApplication = new SpringApplication(Application.class);
    springApplication.setWebEnvironment(false);
    springApplication.run(args);
}

@Bean
public static PropertyPlaceholderConfigurer propertyPlaceholderConfigurer () {
    PropertyPlaceholderConfigurer propertyPlaceholderConfigurer = new MyConfigPropertyPlaceholderConfigurer();
    return propertyPlaceholderConfigurer;
}

我可以看到MyConfigPropertyPlaceholderConfigurer实现已成功将属性加载到其Properties成员中。

但是,在初始化MyErrorHandler时,任何@Value带注释的成员都没有被加载,即使它们确实存在于Properties对象中

@Component
    public class MyErrorHandler {
    @Value("${max.retries}")
    private Integer maxRetries;
    @Value("${backoff.multiplier}")
    private Integer backOffMultiplier;

    public MyErrorHandler() {
        super();
        maximumRedeliveries(maxRetries);
        backOffMultiplier(backOffMultiplier);
    }

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

只有在实例化对象之后才能将其他bean或属性注入到带注释的字段中,因为@Autowired@Inject@Resource@ValueBeanPostProcessors。因此,当调用构造函数时,所有这些字段都将 NOT 被填充。尽管如此,您可以使用带有@Postcosnstruct注释的(私有)方法来运行post-init逻辑,同时保证注入已经发生。

或者,您也可以使用constructor injection让spring调用具有适当参数的专用构造函数。