1.1 AspectJ(掌握)
1.1.1 介绍
l AspectJ是一个基于Java语言的AOP框架
l Spring2.0以后新增了对AspectJ切入点表达式支持
l @Aspect 是AspectJ1.5新增功能,通过JDK5注解技术,允许直接在Bean类中定义切面
l 建议:新版本Spring框架,建议使用AspectJ方式来开发AOP
1.1.2 导入jar
aop联盟定义规范:com.springsource.org.aopalliance-1.0.0.jar
spring aop实现:spring-aop-3.2.0.RELEASE.jar
AspectJ 规范:com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
spring 对 AspectJ支持:spring-aspects-3.2.0.RELEASE.jar
1.1.3 AspectJ的表达式(★★★★★)
execution:匹配方法的执行(常用)
execution([注解] [修饰符] 返回类型 包结构.类名.方法名(参数列表) [异常] )
注解:可选,表示拦截方法必须添加指定的注解。
例如:@java.lang.Deprecated
修饰符:可选,表示方法修饰符。
例如:public
返回类型:表示返回类型。
例如:* 表示返回类型任意【】
包结构:表示类所在的位置。
例如:cn.itcast.*.service.. ,表示所在包cn.itcast.任意.service当前包及子包
类名:表示类的名称。
例如:* 表示所有的类;*Dao 表示所有Dao结尾的类
方法名:表示类中的方法。注意必须手动添写括号()
例如:* 表示所有的方式; add* 表示方法必须以add开头
参数列表:指定方法的参数列表
例如:java.lang.String 只有一个参数字符串; .. 参数任意
异常:可选,表示方法抛出的异常类型
例如:java.lang.RuntimeException 使用的运行时异常
综合案例:execution(*cn.itcast.crm.*.service..*.*(..))
within:匹配包或子包中的方法(了解)
within(cn.itcast.aop..*)
this:匹配实现接口的代理对象中的方法(了解)
this(cn.itcast.aop.user.UserDAO)
target:匹配实现接口的目标对象中的方法(了解)
target(cn.itcast.aop.user.UserDAO)
args:匹配参数格式符合标准的方法(了解)
args(int,int)
bean : 匹配指定的bean (<bean id="bean名称">) (了解)
bean("bean名称")
1.1.4 AspectJ 通知(增强)类型
l AspectJ提供 6种通知类型,常用5种,重要一种。
before表示前置通知。切入点执行前。(目标类的指定方法)
常用案例:数据校验。
afterReturning表示后置通知。切入点执行后。
常用案例:数据处理。可以获得返回值
around 表示环绕通知【重要】。切入点执行的前和后。
常用案例:统计、性能检测、事务
afterThrowing表示抛出通知。切入点执行时,如果发生异常。
常用案例:日志记录
after 表示最终通知。。切入点执行时,必须执行的。
常用案例:清理数据等
环绕通知可以完成任意事情 try{ //前置 //执行目标方法(环绕通知具有的功能) //后置 } catch(){ //异常抛出 } finally{ //最终 } |