自定义缓存注解遇到的问题与解决

      

         起因:由于系统要集成memcached实现缓存服务,java客户端选用xmemcache,本来想集成spring的缓存注解,@Cacheabale,@CachePut,@Cacheevict,但是由于项目中spring版本不够无法使用上面注解,而且版本又不能升级,为了系统的稳定性。

 

          解决办法:为了不想把缓存的操作,侵入业务代码,于是就模仿自定义上面三个注解,并且支持spring el表达式来动态获取方法参数来封装key,表达式解析用SpelExpressionParser类处理

         

          问题:1:在切面处理中无法拿到目标类的执行方法,因为是是基于jdk 动态代理实现切面拦截,接口里是泛型方法,于是我在切面拿到的是桥接方法,不是真实调用方法,通过看spring 源码发现BridgeMethodResolver 类的findBridgedMethod 可以通过桥接方法获取目标方法。

            2:拿到目标方法后,由于要获取方法参数名称来封装缓存key,但通过反射无法拿到方法的参数名称,继续查看spring 源码 ,发现可以通过LocalVariableTableParameterNameDiscoverer 来处理,原理好像是通过ASM 字节码码增强工具来获取目标方法参数名称。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值