Spring Cache 和 Apache Shiro整合的超级深坑
2016-07-04 00:00
656 查看
摘要: spring cache apache shiro
历时1天,跟踪了一天spring aop的源代码。最后在google上找到了答案。
写个笔记记录,希望遇到相同问题的同学,可以避免这个问题。
问题概述
项目到了尾声,需要使用缓存进行优化,项目中使用了shiro技术作为权限框架,spring cache注解形式进行缓存。
发现cache没有起到作用,匪夷所思。于是跟踪spring aop 的源代码发现,在bean创建代理类的过程,根本没有创建spring的cache对象,下面是debug跟踪的具体方法
后来注释掉了shiro配置文件中的
发现可以正常创建ceche代理对象。
最后解决方案,只需要在自定义的shiroRealm中引用service时,加上
一切都正常了。。
具体问题产生原因参考
http://stackoverflow.com/questions/21512791/spring-service-with-cacheable-methods-gets-initialized-without-cache-when-autowi
额外补充另外一个问题
关于spring cache注解使用发现部分方法没有成功进行缓存代理,可进行debug跟踪
观察具体的方法入参,以及是否生成代理。
历时1天,跟踪了一天spring aop的源代码。最后在google上找到了答案。
写个笔记记录,希望遇到相同问题的同学,可以避免这个问题。
问题概述
项目到了尾声,需要使用缓存进行优化,项目中使用了shiro技术作为权限框架,spring cache注解形式进行缓存。
发现cache没有起到作用,匪夷所思。于是跟踪spring aop 的源代码发现,在bean创建代理类的过程,根本没有创建spring的cache对象,下面是debug跟踪的具体方法
[code=language-java]org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.createProxy(Class<?>, String, Object[], TargetSource)
后来注释掉了shiro配置文件中的
[code=plain]<!-- 开启shiro注解支持 --> <bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"> <property name="securityManager" ref="securityManager" /> </bean>
发现可以正常创建ceche代理对象。
最后解决方案,只需要在自定义的shiroRealm中引用service时,加上
[code=plain]@Lazy
一切都正常了。。
具体问题产生原因参考
http://stackoverflow.com/questions/21512791/spring-service-with-cacheable-methods-gets-initialized-without-cache-when-autowi
额外补充另外一个问题
关于spring cache注解使用发现部分方法没有成功进行缓存代理,可进行debug跟踪
[code=language-java]org.springframework.cache.interceptor.CacheAspectSupport.execute(CacheOperationInvoker, Object, Method, Object[])
观察具体的方法入参,以及是否生成代理。
相关文章推荐
- solr 初探
- no segments* file found in org.apache.lucene.store.SimpleFSDirectory
- Linux安装配置apache
- 《Apache Cookbook》学习笔记
- apache服务器外网不能访问的问题
- 【Shiro】Apache Shiro架构之权限认证(Authorization)
- Apache POI 第二讲之对Excel常见操作
- Apache POI 第一讲之创建新工作簿及简单操作
- Intellij Idea 15中开发Maven+osgi项目(Apache felix环境)
- 修改apache的最大连接数
- 查看apache 加载了哪些模块命令
- apache配置虚拟主机域名
- Windows 安装配置 Apache .zip
- Linux部署apache
- 开启Linux下的apache的URL重写
- centos7.0安装Apache+mysql+php
- centos 安装apache
- CentOS 7运维管理笔记(8)----Apache基于域名的虚拟主机配置
- apache vhost 虚拟配置问题
- CentOS 7运维管理笔记(7)----Apache 基于端口的虚拟主机配置