SpringAOP实际应用的一点见解

Spring 最核心最基础的两块东西,就是IOC和AOP,IOC控制反转的作用处处都能体现,但是aop好像没什么作用(大学期间一直这么理解的。。。),知道接触到了公司真正的项目时,才有了一些初步的见解,主要应用范围是日志的记录和缓存操作。

话不赘述直接上代码,普通的xml配置方式着实不够方便不够灵活,切点表达式用execution也是不够灵活的,实际工作中需要进行aop拦截的也许是分布在工程的各个地方,而不是单单只存在于某个包内。所以个人一直在使用的是@annotation()的方式,所有工作都是用注解来完成,只需要在Spring配置文件中(有MVC中的组件需要拦截的话也要在MVC配置文件中配置)配置代理开启和扫描aop切面类存在的包路径。


@Around(),该注解中有两个属性一个是value,一个是argNames。values就是定义切点匹配条件,argNames个人理解是只有在切点匹配条件中存在参数匹配时,才需要使用。具体解释请参照 http://www.cnblogs.com/powerwu/p/5211611.html 这也是网友做的测试。
自定义注解:Stat,AccessLog,SecurityLog。三者在切点匹配条件中用了或符号进行连接,无法直接作为参数传入通知方法中,但是如果使用与符号进行连接,则可以传入通知方法,如

 
  

至于或符号无法直接作为参数传入,我还不知道原因,猜测是若被拦截方法只存在其中一种或两种注解时,则通知方法中三个参数不能都匹配到具体的对象,所以会抛出异常吧,有知道原因的朋友欢迎告知。既然无法作为参数传入,但是还是需要根据注解的不同组合进行不同的实现,所以必须要获取到注解才行,个人是通过反射的方式获取到方法上存在的所有注解,再来进行操作,具体获取方式就在getAnnotations(pjp)方法中,具体实现如下



接下来是Spring配置文件

 
  

Spring文件也只需要这样简单的配置一下,aop只能拦截被Spring创建成bean的方法,第一行就是扫描包路径下需要被创建成bean的类,其余的就是扫描切面类和开启代理CGLIB。接下来就只要在你希望aop拦截的方法上加入自定义注解即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值