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方法。
