1)切面(Aspect): 指交叉业务逻辑的统称, 比如日志,事务,安全;
2)通知(Advice): 指切面的具体实现;
3)连接点(Joinpoint):指切面可以织入到(应用到)目标对象的位置(级别), 两个: 方法/属性代理模式, 调用的是代理对象, 代理维护一个目标对象的属性; 调用方法之前, 先写日志; 再调用具体的实现方法; 调用属性之前, 拦截一下做处理,很少用;Spring目前不支持这个;
4)切入点(Pointcut):指通知(切面的具体实现)应用到哪些目标对象的哪些方法或者哪些属性上; org.springframework.aop.PointcutSpring根据类名称及方法名称定义Pointcut,表示Advice织入至应用程序的时机;
5)引入(introduction):指动态的给一个对象增加方法或者属性的过程;是一种特殊的通知;
6)织入(weaving):将切面(通知)应用到目标对象生成代理的过程;
7)代理对象(Proxy): 目标对象应用切面以后生成的代理(切面织入之后生成的新的代理对象);
8)目标对象(Target): 具体业务逻辑的实现(需要织入切面的对象);
再说AOP,还是以上面的例子。
比如你想在每次写字之前都检查一下笔里有没有墨水了,通常的做法是:在写字这个Action里调用判断是否有墨水的方法。这样做的不好一个方面是,写字的action和是否有墨水的方法产生了依赖,如果你有十几支不同的笔写字,每一个笔的Action里都要调用判断是否有墨水的方法;另一个方面是:就面向对象的程序设计来说,写字和判断是否有墨水的方法是同一等级的,如果你让写字这个动作来判断是否有墨水不够人性化,有违面向对象的程序设计的思想。
如果用Spring的AOP,是把写字的Action作为一个切面,在每次调用不同的笔来写字的方法之前,调用判断是否有墨水的方法。它是由标签在Spring配置文件里定义的,形式如:
这里,对com.baidu.dao下所有以write开头的方法做了一个切面,做要做的操作是以下面的pointcut-ref=”allManagerMethod”来定义的。
execution(* j3t10.dao.UserDao.*(..))
上面第一个*号表示返回值类型任意。第二个星号表示UserDao类中任意方法。(..)表示方法参数任意。
execution(* com.baidu.dao.write*(..))
返回类型不限,在com.baidu.dao.write包下的所有方法,不限参数
原文地址:http://blog.csdn.net/cutter_point/article/details/44832925