搭建框架中想使用SpringCache提升部分查询数据的效率发现部分Service使用@Cacheable注解无效,发了两个晚上各种测试最终定位到失效的Service都与权限相关,尝试一下搜索Shiro+@Cacheable,果然找到了答案。
问题原因:由于Shiro框架初始化比Spring框架的某些部件早,导致使用@Autowire注入Shiro框架的某些类不能被Spring正确初始化。
解决方法:使用@Autowire+@Lazy注解,设置注入到Shiro框架的Bean延时加载(即在第一次使用的时候加载)
但是后续发现在ShiroConfig的时候初始化系统的所有权限使用以上方法并不能解决问题,
将ShiroConfig中使用的权限Service才去@Bean生成一个权限Service对象