一、代理
为其他对象提供一种代理以便控制对这个对象的访问。
(1)静态代理
(2)动态代理
1)JDK自带的动态代理
2)javaassist字节码操作库实现
3)CGLIB
4) ASM(底层使用指令,可维护性较差)
二、静态代理
静态代理模式一般会有三个角色:
抽象角色:指代理角色和真实角色对外提供的公共方法,一般为一个接口
真实角色:需要实现抽象角色接口,定义了真实角色所要实现的业务逻辑,以便供代理角色调用。也就是真正的业务逻辑在此。
代理角色:需要实现抽象角色接口,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。
三、动态代理
(1)Proxy
InvocationHandler接口
.invoke(Object proxy,Method moehtod,Object[] args) 代理执行接口拦截方法
Proxy
.newProxyInstance(ClassLoader loader,Class[] interfaces,Invcationhandler handler) 创建动态代理实例
(2)CGLIB
MethodInterceptor
- intercept(Object obj,Method method,Object[] args,MethodProxy proxy) Object 拦截方法
Enhancer
- setSuperClass(Class superClass) 设置父类
- setCallback(CallBack callBack) 设置回调拦截器
- setClassLoader(ClassLoader loader)
- create() Object 创建代理对象
MethodProxy
- invokeSuper(Object obj,Object[] args) Object 执行代理对象
- invoke(Object target,Object[] args) Object 执行被代理对象