动态代理就是对目标对象的方法做不同的代理实现,通俗点说就是在一个方法的执行前后加上对应的处理逻辑。例如spring的事务处理,在插入一条数据的前面开启事务,插入完成后提交事务。
现在我们解析一下动态代理底层的执行方式,直接上代码:
public interface Parent {
public void create();
}
public class Sub implements Parent {
public void create() {
System.out.println("sub create");
}
}
public class Log {
public static void before(){
System.out.println("before");
}
public static void after(){
System.out.println("after");
}
}
public class ProxyHandler implements InvocationHandler {
public Object obj;
public ProxyHandler(Object obj) {
this.obj=obj;
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Log.before();
Object result=method.invoke(obj,args);
Log.after();
return result;
}
public static <T> T execute(Class<T> clazz,T t){
ClassLoader classLoader = clazz.getClassLo