《ASPECTJ学习笔记》
1.AOP的几个概念:
☆JoinPoint(连接点)-应用程序中某个特定的点,该点可以执行某个通知事件。
AspectJ支持的连接点:
方法
构造函数
字段
静态初始化块
方面通知执行
对象初始化之前、期间
☆Pointcut(切点)-用于声明一组连接点,在这组连接点发生的时候调用到一定的通知
AspectJ支持的切入点:
call:方法调用切入点
execution:方法执行切入点
target、this
get、set
args
initialization、staticinitialization、preinstialization
within、withincode
cflow、cflowbelow
&&、||、!
☆Advice(通知)-在符合特定条件的情况下执行具体动作的代码的语言构造子称为通知,即声明在连接点被调用时应该执行的动作。依据切入点的语义,将通知分为以下三类:
※ Before advice:在连接点之前执行;
※ After advice :在连接点之后执行;
※ Around advice :代替原连接点处方法的执行。
能够决定匹配的连接点是否继续执行
能够改变连接点的返回值
能够改变当前连接点的参数
☆Aspect(方面):一个方面是封装横切关注点的一个独立的标准单元,类似于面向对象编程中的类。其中包括通知和切入点的定义。
☆Crosscutting concern(横切关注点)
☆编织(weave),是将核心关注点和横切关注点有机融合的过程。
※ 编译时编织(compile-time weaving):在编译的过程中进行编织
※ 编译后编织(post-compile weaving):对已经编译好的字节码进行编织
※ 加载时编织(load-time weaving):在类被加载进JVM的时候进行编织,在加载时通过aop.xml对编织的对象进行控制
2.简单例子
(一)普通示例
public aspect LogExceptions{
public pointcut recording():call(public * com.icefeish..*(..));
after() throwing(Exception e):recordlog(){
logger.error("Error in calling method",e);
}
}
(二)使用注解的方式示例
@Aspect
public class SayAspect {
@Pointcut("execution(void HelloWorld.sayHello())")
public void say() {}
@Before("say()")
public before(){
System.out.println("before say hello....");
}
@After("say()")
public after(){
System.out.println("after say hello....");
}
}
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23937368/viewspace-1057834/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/23937368/viewspace-1057834/