最近遇到个场景,需要在使用@Bean注解定义bean的时候为对象设置一些属性,比如扫描路径,因为路径经常发布新特性的时候需要修改,所以就计划着放在配置文件中,然后通过@ConfigurationProperties或@Value结合@PropertySource注入,类似如下:

@Configuration
@PropertySource("classpath:application.properties")
public class AbcConfig {
@Value("${myconfig}")
private String myconfig;
}

但是只要在Config类中,myconfig就怎么都无法注入。

改成使用configurationproperties获取后,仍然无法注入。

@Configuration
@ConfigurationProperties(prefix = "mybatis")
@PropertySource("classpath:application.properties")
public class AbcConfig {
private String myconfig;
}

和@Value一样,在非Config注解的普通bean中都能够正常注入。

于是搜了下网上,有个帖子说在Config配置类中显示定义PropertySourcesPlaceholderConfigurer即可,如下:

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

但是我们发现仍然无法注入。于是采用最原始的方法,依赖Environment来获取,结果发现它也没有自动注入,一直为null(注,这里可能是因为我们在依赖Environment的Bean上显示定义了@Order(1)优先创建的原因)。最后只要让bean实现EnvironmentAware接口显示设置,如下:

@PropertySource("classpath:myconfig.properties")
@Configuration
public class AbcConfig implements EnvironmentAware {
private Environment env; @Override
public void setEnvironment(Environment environment) {
this.env=environment;
}
}

然后使用env.getProperty就可以获取到配置了。

备注:@configurationproperties和@value区别如下:

@ConfigurationProperties和@Value的选用
如果只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;

如果专门编写了一个javaBean来和配置文件进行映射如datasource,我们就直接使用@ConfigurationProperties;

最后,为啥原理很重要,这个时候就体现在对整体流程以及体系是否熟悉,如果熟悉就知道问题如何解决,否则不知道往哪里去,这也是面试的时候,我们经常会问或者被问及spring boot自动配置原理的原因。

最新文章

  1. gulp.js基础入门
  2. callee
  3. 【SPOJ】10628. Count on a tree(lca+主席树+dfs序)
  4. ODI中的临时接口
  5. java线程图
  6. 使用XML与远程服务器进行交互
  7. CentOS7 安装Docker报错
  8. 在android的spinner中,实现取VALUE值和TEXT值
  9. HTTP-304 NOT Modified
  10. Spark常用函数讲解之Action操作
  11. Advanced Data Structures
  12. Android 关于ListView中按钮监听的优化问题(方法一)
  13. Linux系统的/proc目录
  14. 主备(keepalived+haproxy)
  15. 将多张图片打包成zip包,一起上传
  16. Jquery实现轮播公告
  17. aliyun centos14.04 trusty 上安装docker1.12.1
  18. js怎么把一个数组里面的值作为一个属性添加到另一数组包含的对象里(小程序)
  19. jquery.lazyload 使用
  20. Unity教程之-基于行为树与状态机的游戏AI

热门文章

  1. 关于word粘贴图片无法显示的原因
  2. Windows 主机名映射地址
  3. python基础4 input()函数
  4. qss qt按钮自定义
  5. Django之JWT理解及简单应用
  6. Redis在windows下安装与配置
  7. CF653F Paper task
  8. DAX/PowerBI系列 - 关于时间系列 - 时间相关数值比较 - 用非自带函数
  9. 真正可用的安卓webview html图片上传限制突破处理(拍照+相册都可以用)
  10. linux c tcp p2p