AOP
AOP(Aspect Oriented Programming):
通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。
对代理类进行访问控制,不会修改代理类中元素的数量。spring容器中的bean不是代理对象
Spring中是实现:
JDK Proxy 和 CGLib Proxy
JDK:
利用拦截器(拦截器必须实现InvocationHanlder)加上反射机制(Proxy.newProxyInstance)生成一个实现代理接口的匿名类
只能针对接口不能针对类实现代理
CGLib:
利用ASM开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理
实现CGLIB动态代理必须实现MethodInterceptor(方法拦截器)接口
通过继承方式实现代理。所以类或方法最好不要声明成final,对于final类或方法,是无法继承的。