AOP 它可以解决OOP和过程化方法不能够很好解决的横切 (crosscut)问题,
AOP的实现主要是通过方法的拦截实现 .在不使用AOP框架的情况下,我们可以通过JDK提供的动态代理 来实现方法的拦截
通过java.lang.reflect.Proxy;提供的
public static Object newProxyInstance(ClassLoader loader,
Class<?>[] interfaces,
InvocationHandler h)
方法可以生成一个动态代理对象
通过配置这个将aop加入
< aop:aspectj-autoproxy />
Spring主要通过代理来实现AOP
下面是AOP的一些基本概念:
切面(Aspect): 对横切关注点的抽象(类似类对对象的抽象)
连接点(JoinPoint): 被拦截到的点,泛指方法
切入点(CutPoint): 对哪些连接点进行拦截的定义
通知(Advice): 在特定的连接点,AOP框架执行的动作.前置/后置/例外/最终/环绕通知(调用方法 之前执行,全部执行完毕之后)
Before ; AfterReturning ; AfterThrowing ; After ; Around
引入(Introduction): 添加方法或字段到被通知的类。 Spring允许引入新的接口到任何被通知的对象。例如,你可以使用一个引入使任何对象实现 IsModified接口,来简化缓存。
目标对象(Target Object): 包含连接点的对象。也被称作 被通知或被代理对象。
AOP代理(AOP Proxy): AOP框架创建的对象,包含通知。 在Spring中,AOP代理可以是JDK动态代理或者CGLIB代理。
织入(Weaving): 组装方面来创建一个被通知对象。这可以在编译时 完成(例如使用AspectJ编译器),也可以在运行时完成。Spring和其他纯Java AOP框架一样, 在运行时完成织入。