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


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