背景
最近使用SpringBoot整合shrio時,針對于一些配置,例如:超時、密碼重試次數等配置,需要單獨配置在yml中,方便部署時變更。
但是卻遇到獲取不到y(tǒng)ml中自定義屬性問題,一直顯示null。
經過測試發(fā)現(xiàn)在配置了LifecycleBeanPostProcessorBean的時候,shiro的配置總是優(yōu)先于spring boot獲取yml步驟前,因此shiro中如果有用到y(tǒng)ml中的配置,一直是獲取不到的。
解決方法
LifecycleBeanPostProcessor作用于在實現(xiàn)了Initializable接口的Shiro bean初始化時調用Initializable接口回調,在實現(xiàn)了Destroyable接口的 Shiro bean 銷毀時調用 Destroyable接口回調。
https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#spring-core中有一個解釋如下:

image.png

image.png
LifecycleBeanPostProcessor是BeanPostProcessor的子類,參照上面的說法,應該將其設置為static方法獲取Bean。
這樣不會觸發(fā)配置類的初始化,如果配置類過早初始化,則@Autowired與@Value會無效!
因此解決辦法就是將獲取LifecycleBeanPostProcessor這個bean的方法設置為static!
接下來,就可以正常的在@Configuration類中使用@Autowired注解了。
自定義yml屬性順利注入!

image.png