1、AOP Aspect Oriented Programming 面向切面编程
以拦截的方式实现横越多个模块的业务关注点,如事务、日志、身份验证等
2、使用代理来拦截 Proxy
代理模式:代理类与本类实现同一接口
3、核心概念
代理对象(Proxy):拦截
拦截器(Interceptor):实现拦截逻辑
目标对象(Target):即Proxy所代理的对象
代理对象会拦截要执行的方法,先执行拦截逻辑,然后再执行目标对象的方法
Proxy----> Interceptor ---->Target
4、代理实现
1)JDK动态代理
由JDK自带的动态代码生成技术实现
可以对实现接口的类进行代理
Proxy.newProxyInstance(ClassLoader,Interfaces,Interceptor)
Interceptor类必须包含了Target属性
2)CGLib
可以对没有实现接口的类进行代理
5、代码
1)Interceptor实现
public class XXXInterceptor implements InvocationHandler {
private Object target;
public XXXInterceptor(Object target) {
this.target = target;
}
public Object invoke(Object proxy, Method method, Object[] args) {
//拦截逻辑
......
Object result = method.invoke(target, args);
//拦截逻辑
......
return result;
}
}
2)Proxy实现
XXXInterface xxx = new XXInterfaceImpl();
XXXInterface xxxProxy = Proxy.newProxyInstance(xxx.getClass().getClassLoader(),
xxx.getClass().getInterfaces(), new XXXInterceptor(xxx) );
3)调用
xxxProxy.function();