背景
最近使用SpringBoot整合shrio时,针对于一些配置,例如:超时、密码重试次数等配置,需要单独配置在yml中,方便部署时变更。
但是却遇到获取不到yml中自定义属性问题,一直显示null。
经过测试发现在配置了LifecycleBeanPostProcessorBean
的时候,shiro的配置总是优先于spring boot获取yml步骤前,因此shiro中如果有用到yml中的配置,一直是获取不到的。
解决方法
LifecycleBeanPostProcessor
作用于在实现了Initializable接口的Shiro bean初始化时调用Initializable接口回调,在实现了Destroyable接口的 Shiro bean 销毁时调用 Destroyable接口回调。
https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#spring-core中有一个解释如下:
LifecycleBeanPostProcessor
是BeanPostProcessor
的子类,参照上面的说法,应该将其设置为static方法获取Bean。
这样不会触发配置类的初始化,如果配置类过早初始化,则@Autowired与@Value会无效!
因此解决办法就是将获取LifecycleBeanPostProcessor
这个bean的方法设置为static!
接下来,就可以正常的在@Configuration类中使用@Autowired注解了。
自定义yml属性顺利注入!