代理模式:为其他对象提供一种代理以控制这个对象的访问。
代理对象起到的作用,可以去掉功能服务或增加额外的服务。
常见代理模式:
远程代理、虚拟代理、保护代理、智能引用代理
静态代理概念和实现方法方式:
概念:代理和被代理对象在代理之前是确定的。他们都实现相同的接口或者相同的抽象类。
实现方式:
通过继承的方式(代理类继承被代理的类,并增加代理类的功能)。
通过聚合的方式(推荐)(将被代理的类最为代理类的一个属性,来增加代理类的功能)。
java的动态代理:
实现方式:
demo:
public class TimeHandle implements InvocationHandler {
private Object target;
public TimeHandle(Object target) {
super();
this.target = target;
}
/**
* 参数: proxy:被代理的对象 method:被代理的方法 args:被代理方法的参数
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("方法执行前...");
method.invoke(target, args);
System.out.println("方法执行后...");
return null;
}
}
public class Test {
public static void main(String[] args) {
// 测试jdk动态代理
Car car = new Car();
Moveable move = (Moveable) Proxy.newProxyInstance(Car.class.getClassLoader(), Car.class.getInterfaces(),
(InvocationHandler) new TimeHandle(car));
move.move();
}
}
JDK与CGLIB实现动态代理的区别: