1、AOP的基本概念
AOP在官方解释为面向切面编程,这话很官方,我的理解是,在不修改源代码的前提下,对类中的方法进行增强操作,并且,去掉或加上这些操作,对源代码正常运行没有影响。
2、AOP底层原理
AOP的底层原理实现其实是一个叫做动态代理的方式,然而,动态代理又分为JDK动态代理、CGlib动态代理。
1)JDK动态代理
JDK动态代理实质上是增强了一个实现了一个接口类的方式,在主方法里面运用Proxy.newProxyInstance进行一个动态代理,值得注意的是newProxyInstance里面有三个参数,
第一个参数是它的类加载器,通常使用加载Proxy.newProxyInstance的类.class.getClassLoader();
第二个参数是你要实现的接口,并且是一个数组型的。
第三个参数是一个实现了InvocationHandler接口的类来做。
并且,在InvocationHandler里面有一个方法为Invoke,它的作用是增强逻辑。
2)CGlib代理
它的的两个核心接口,分别是MethodInterceptor和Enhancer
跟JDK动态代理很相似,用法也差不多,但CGLIB可以代理类和接口,注意:不能代理final类。
某个类,实现MethodInterceptor接口,并实现intercept
3、AOP的专业术语
1)连接点:指的是哪些方法是可以动态被拦截或者是增强的。
2)切入点:目标增强的或者是目标拦截的方法。
3)通知(增强):实际上已经增强的内容,即InvocationHandler里面的invoke方法里面的内容.
另外的,通知有许多方式:前置通知、后置通知、环绕通知、异常通知、最终通知(相当于finally)。
4)Target(目标):指代理的目标对象。
5)Weaving(植入):指把增强代码应用到目标上,生成代理对象的过程。
6)Proxy(代理):指生成的代理对象。
7)Aspect(切面):切入点和通知的结合。



