关于动态代理的理解, 就是本来一个对象执行一个方法 在不能修改这段代码的前提下(比方说源码等等)
,对这段代码执行的功能进行加强 ,然后就产生了动态代理的思想。
生成一个动态代理类 当你想使用这个增强后的方法时 ,执行的是原对象的方法加上你在原对象引用的方法上,
上下加上的增强代码。动态代理也体现了aop思想,只要增强一次代码,凡是由动态代理生成最后执行到此方法
都会类似于被拦截被增强。

package com.imooc;
public class Car implements CarInterface{
//这里是 被代理类 实现CarInterface接口 重写run方法
@Override
public void run() {
System.out.println("小汽车在跑。。。。");
}
}
-----------------------------------------------------------
package com.imooc;
public interface CarInterface {
//被代理类实现的接口 一个run方法
public void run();
}
-----------------------------------------------------------
package com.imooc;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class CarDynamicProxy implements InvocationHandler {
//动态代理类 将被代理类接口注入成属性
private Object car;
public CarDynamicProxy (Object car){
this.car = car;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
//包裹被代理类执行的方法外面 可以书写自己的方法
System.out.println("小汽车启动");
method.invoke(car,args);
System.out.println("小汽车停车");
return null;
}
public Object getCar() {
return car;
}
public void setCar(Object car) {
this.car = car;
}
}
-----------------------------------------------------------
package com.imooc;
import java.lang.reflect.Proxy;
public class Client {
//测试类
public static void main(String[] args) {
CarInterface car = new Car();
CarDynamicProxy carproxy = new CarDynamicProxy(car);
CarInterface proxy = (CarInterface) Proxy.newProxyInstance(car.getClass().getClassLoader(),
car.getClass().getInterfaces(), carproxy);
proxy.run();
}
}
-----------------------------------------------------------
//console控制台打印结果
小汽车启动
小汽车在跑。。。。
小汽车停车