JDK动态代理:
接口:
public interface ICar {
public String driveCar(String name);
}
实现类:
public class Car implements ICar{
public int carid;
public String carName;
public Car(){
}
public Car(int carid,String carName){
this.carid = carid;
this.carName = carName;
}
public String driveCar(String name){
System.out.println("谁在开车:"+name);
return name;
}
}
代理类:
public class Carproxy implements InvocationHandler{
private Car car;
public Carproxy(Car car){
this.car = car;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object ob = method.invoke(this.car, args);
return ob;
}
}
测试类:
public class CarproxyTest {
public static void main(String[] args){
Car car = new Car();
Carproxy cproxy = new Carproxy(car);
ICar icar = (ICar)Proxy.newProxyInstance(CarproxyTest.class.getClassLoader(),
car.getClass().getInterfaces(), cproxy);
icar.driveCar("老司机");
}
}
静态代理:
可以查看:设计模式之代理模式
注意几点:
- JDK动态代理是基于接口的,如果类没有实现接口则不能进行JDK动态代理
- JDK动态代理类实现InvocationHandler接口
- cglib是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法(继承)