AOP概念

AOP(Aspect-Oriented programming)面向方面编程,从模块化出发,用来描述分散在对象、类或函数中的横切关注点。从关注点中分离出横切关注点是面向切面的程序设计的核心概念。分离关注点是解决特定领域的代码从业务逻辑中独立出来,业务逻辑的代码中不再含义针对领域问题代码的调用,业务逻辑同特定领域问题的关系通过切面来封装,维护,这样原本分散在整个应用程序中的变动就可以很好地管理起来。

层次3--语言和开发环境

层次2--面向方面系统

层次1--底层编织实现模块


Advice(通知)定义在连接点做什么,为切面增强提供织入接口。在SpringAOP中,主要围绕方法调用而注入的切面行为。

BeforeAdvice定义了为待增强的目标方法设置的前置增强接口MethodBeforeAdvice,使用这个前置接口需要实现一个回调函数void before(Method method,Object[] args,Object target)throws Exception;Method对象,是目标方法的反射对象,Object[]  对象数组,包含目标方法的输入参数。目标方法调用之前实现切面增强。

AfterAdvice,AfterReturningAdvice定义了接口方法void afterReturning(Object returnValue,Method method,Object[] args,Object target) throws Throwable;

afterReturning也是一个回调函数,在目标方法调用成功并成功返回的时候,接口会被SpringAOP回调。目标方法成功调用返回结果后实现切面增强。

ThrowsAdvice,没有指定需要实现的接口方法,在抛出异常时被回调,这个回调是AOP使用反射机制来完成的。

PointCut:切点决定Advice通知应该作用于哪个连接点,也就是通过PointCut来定义需要增强的方法的集合,通常意味着标识方法。

Advisor通知器:完成的目标方法的切面增强设计和关注点的设计后,将它们结合起来。通过Advisor,可以定义应该使用哪个通知并在哪个关注点使用它,这个结合为使用IOC容器配置AOP应用提供便利。在DefaultAdvisor中,有两个属性:advice和pointcut。


Spring AOP的核心是动态代理,JDK的一个特性,可以为任意java对象创建代理对象。

Client      -----request()--------》

Proxy模式:  1.[preOperation()]

            ------2.request()------->       RealSubject

           3.postOperation()


<span style="font-size:24px;">public interface InvocationHandler(){</span>
public Object invoke(Object proxy,Method method,
Object[] args) throws Throwable;
}
invoke 方法,第一个参数是代理对象实例,第二个参数是Method方法对象,代表的是当前Proxy被调用的方法,最后一个是被调用的方法的参数。


Spring AOP的应用场景:直接使用AOP的功能,设计应用的横切关注点,把跨应用程序多个模块的功能抽象出来,通过简单的AOP使用,灵活的编到模块中,比如通过AOP实现应用程序的日志功能。

在Spring内部,一些支持模块也是通过SpringAOP来实现的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章