静态代理
图片:
代理类的方法:
优缺点:
动态代理
图片:
代理类的方法;
public class ProxyFactory {
private Object target;
public ProxyFactory(Object target) {
this.target = target;
}
//给目标对象生成一个代理对象
public Object getProxyInstance() {
//
/*
* public static Object newProxyInstance(ClassLoader loader,
Class<?>[] interfaces,
InvocationHandler h)
//1.ClassLoader loader :指定当前目标对象使用的类加载器,获取加载器的方法固定
//2.Class<?>[] interfaces:目标对象实现的接口类型,使用泛型方法确认类型
//3.InvocationHandler h :事情处理,执行目标对象的方法时,会触发事情处理器方法作为一个参数传入
*/
return Proxy.newProxyInstance(target.getClass().getClassLoader(),
target.getClass().getInterfaces(),
new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// TODO Auto-generated method stub
//反射调用目标方法
Object returnVal = method.invoke(target, args);
return returnVal;
}
});
}
}
在AOP编程中如何选择代理模式:
- 目标对象需要实现接口,用JDK代理
- 目标对象不需要实现接口,用Cglib代理
cglib 代理
proxtyfacotry 方法: