动态代理对象有点看不懂,求解

package cn.itcast_06;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class MyInvocationHandler implements InvocationHandler {

private Object target; // 目标对象

public MyInvocationHandler(Object obj) {
    this.target = obj;
}

@Override
public Object invoke(Object proxy, Method method, Object[] args)
        throws Throwable {
    System.out.println("权限校验");
    Object result = method.invoke(target, args);
    System.out.println("日志举例");
    return result; // 返回的是代理对象
}

}

package cn.itcast_06;

import java.lang.reflect.Proxy;

public class Test {
public static void main(String[] args) {
UserDao ud = new UserDaoImpl();
ud.add();
ud.delete();
ud.update();
ud.find();
System.out.println("----------");
// 我们要创建一个动态代理对象
// Proxy类中有一个方法可以创建动态代理对象
// public static Object newProxyInstance(ClassLoader loader,Class<?>[]
// interfaces,InvocationHandler h)
// 我准备对ud对象做一个代理对象
MyInvocationHandler handler = new MyInvocationHandler(ud);
UserDao proxy = (UserDao) Proxy.newProxyInstance(ud.getClass()
.getClassLoader(), ud.getClass().getInterfaces(), handler);
proxy.add();
proxy.delete();
proxy.update();
proxy.find();
System.out.println("----------");

    StudentDao sd = new StudentDaoImpl();
    MyInvocationHandler handler2 = new MyInvocationHandler(sd);
    StudentDao proxy2 = (StudentDao) Proxy.newProxyInstance(sd.getClass().getClassLoader(),
            sd.getClass().getInterfaces(), handler2);
    proxy2.login();
    proxy2.regist();
}

}

http://www.cnblogs.com/xiaoluo501395377/p/3383130.html
http://www.cnblogs.com/flyoung2008/archive/2013/08/11/3251148.html