Springboot 在@Configuration注解的勒种 使用@Autowired或者@value注解 读取.yml属性失败

springboot中@value注解,读取yml属性失败

问题场景:

  配置ShrioConfig时,想注入.yml的参数进行配置

解决办法:

  如果注释掉shiroEhcacheManager 以下所有bean的创建,项目能启动,当我@Bean(name = "lifecycleBeanPostProcessor")创建这个bean的时候就抛出了上面的异常。这么分析过来问题应该出在这个bean上。

  百度了一下,LifecycleBeanPostProcessor用于在实现了Initializable接口的Shiro bean初始化时调用Initializable接口回调,在实现了Destroyable接口的Shiro bean销毁时调用 Destroyable接口回调。

  而我在创建的EhCacheManager 正是实现了Initializable接口,官方的在配置上面的说明大概意思就是 使用@Configuration配置,会在上下文初始化的时候强制的注入一些依赖。导致一下不可知的初始化。尤其是创建BeanPostProcessor 和 BeanFactoryPostProcessor的时候(LifecycleBeanPostProcessor正是BeanPostProcessor 的子类)。

  应该将这些创建Bean的方法前面加上static。让使用configuration的类在没有实例化的时候不会去过早的要求@Autowired和@Value
进行注入。
  最后解决问题很简单,只要在创建LifecycleBeanPostProcessor的方法变为静态static方法。

posted @ 2019-08-28 15:35  iFindU_San  阅读(5538)  评论(0编辑  收藏  举报