一.基本概念
1.aspect(切面):一个关注点的模块化,这个关注点会横切多个对象,在spring aop中通过注解@Aspect实现。(个人理解就是定义通知方法的类)
2.joinpoint(连接点):程序执行过程中,某一个特定的点,一个连接点代表一个方法被执行。通过声明一个org.aspectj.lang.JoinPoint类型的参数使通知(advice)获取主体部分连接点的信息(例如dao层中的save()被执行)
3.advice(通知):在切面的某个特定的连接点(joinpoint)上执行的动作。通知有前置,后置,环绕等多种类型
4.pointcut(切入点):匹配连接点的断言.通知和一个切入点表达式关联,Spring缺省使用AspectJ切入点语法。(个人理解就是连接点所执行的方法,或者该方法所在的类)
5.introduction(引入):
6.target object(目标对象):被一个或多个被通知的对象。(个人理解就是实际存在的业务类或接口)
7.aop proxy(aop代理):aop框架创建的对象,用来实现切面契约(aspect contract),spring aop针对接口使用jdk动态代理,正对类使用CGLIB代理。(个人理解就是业务类被加入通知之后的形式)
8.weaving(织入):把切面连接到其他的运用程序类型或者对象上,并创建一个被通知的对象。在运行时完成织入。(个人理解就是程序执行时包含通知的切面被关联到业务类上,产生被通知对象)
9.通知类型
before advice(前置通知):在连接点之前执行的通知,如果该通知抛出一个异常,会阻止连接点前的执行
after returning advice(返回后通知):在连接点正常完成执行的通知,没有返回一个异常,正常返回。
after throwing advice(抛出异常后通知):在方法抛出异常退出时执行的通知。
after(finally) advice(后通知):在某个连接点退出的时候执行的通知(无论正常还是异常退出)。
around advice(环绕通知):包围着一个连接点的通知,可以在方法调用前后完成自定义的行为。
10.切入点表达式
execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)
modifiers-pattern:方法操作权限
ret-type-pattern:返回值
declaring-type-pattern:方法所在的包
name-pattern:方法名
parm-pattern:参数名
throws-pattern:异常
例如:
execution(java.lang.Integer com.asarja.aop.annotation.*.*(Mp3))
执行返回值是int类型,参数是Mp3类型的方法
execution(* com.asarja.aop.annotation.*.s*(Mp3))
执行以s开头的方法,参数是Mp3类型