一. 什么是AOP
AOP为Aspect Oriented Programming的缩写,意为:面向切面编程(也叫面向方面),可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加 功能的一种技术。AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。
主要的功能是:日志记录,性能统计,安全控制,事务处理,异常处理等等。
主要的意图是:将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。
可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。
在Spring中提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例 如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并 不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。
498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' alt="" src="/uploadfile/201301/12/F4122659106.jpg" />
切面(Aspect)
切面是你要实现的交叉功能。它是应用系统模块化的一个切面或领域。切面的最常见(虽然简单)例子是日志记录。日志记录在系统中到处需要用到,利用继承来重用日志模块不适合。然而,你可以创建一个日志记录切面,并且使用AOP在系统中应用。
连接点(Joinpoint)
连接点是应用程序执行过程中插入切面的地点。这个地点可以是方法调用,异常抛出,或者甚至是要修改的字段。切面代码在这些地方插入到你的应用流程中,添加新的行为。
通知(Advice)
通知切面的实际实现。它通知应用系统新的行为。在日志例子中,日志通知包含了实现实际日志功能的代码,如向日志文件写日志。通知在连接点插入到应用系统中。
切入点(Pointcut)
切入点定义了通知应该应用在哪些连接点。通知可以应用到AOP框架支持的任何连接点。当然,你并不希望把所有切面应用到所有可能的连接点上。切入点让你指定通知应用到什么地方。通常通过指定类名和方法名,或者匹配类名和方法名式样的正则表达式来指定切入点。一些AOP框架允许动态创建切入点,在运行时根据条件决定是否应用切面,如方法参数值。
引入(Introduction)
引入允许你为已存在类添加新方法和属性。例如,你可以创建一个稽查通知来记录对象的最后修改时间。只要用一个方法setLastMofified(Date)以及一个保存这个状态的变量。可以在不改变已存在类的情况下将这个引入,给他们新的行为和状态。
目标对象(Target)
目标对象是被通知对象。它既可以是你编写的类也可以是你要添加制定行为的第三方类。如果没有AOP,这个类就必须要包含它的主要逻辑以及其他交叉业务逻辑。有了AOP,目标对象就可以全身心地关注主要业务,忘记应用其上的通知。
代理(Proxy)
代理是将通知应用到目标对象后创建的对象。对于客户对象来说,目标对象(应用AOP之前的对象)和代理对象(应用AOP之后的对象)是一样的。也就是,应用系统的其他部分不用为了支持代理对象而改变。
织入 (Weaving)
织入是将切面应用到目标对象从而创建一个新的代理对象的过程。切面在指定接入点被织入到目标对象中。
二. 几个重要接口
用于找到用于通知的相关的类型和方法
- View Code
- public interface IPointcut
- {
- ITypeFilter TypeFilter { get; }
- IMethodMatcher MethodMatcher { get; }
- }
用