JDK 动态代理
2013-02-28 13:45 hduhans 阅读(123) 评论(0) 收藏 举报JDK动态代理一个简单的例子:
1.UserDao.java
package proxy.myproxy.dynamicProxy; public interface UserDao { void save(); void delete(); }
2.UserDaoImpl.java
package proxy.myproxy.dynamicProxy; public class UserDaoImpl implements UserDao{ public void save() { System.out.println("UserDao save()"); } public void delete() { System.out.println("User deleted()"); } }
3.InvocationHandlerImpl.java
package proxy.myproxy.dynamicProxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; public class InvocationHandlerImpl implements InvocationHandler { private Object target; public InvocationHandlerImpl(Object target){ this.target = target; } public Object invoke(Object proxy, Method method, Object[] args)//args是那个你执行的那个方法的参数 throws Throwable { System.out.println(proxy.getClass());//这里输出:class $Proxy0,可以看出proxy是什么 System.out.println(target.getClass());//这里输出:class proxy.myproxy.dynamicProxy.UserDaoImpl,可以看出target是什么 System.out.println(method.getName()+"开始"); Object obj = method.invoke(target, args);//obj是方法执行完之后的返回值 System.out.println("结束"); return obj; } }
4.测试类Test.java
package proxy.myproxy.dynamicProxy; import java.lang.reflect.Proxy; public class Test { public static void main(String[] args) { UserDao userDao = new UserDaoImpl(); UserDao userDaoProxy = (UserDao) Proxy.newProxyInstance(userDao.getClass().getClassLoader(), userDao.getClass().getInterfaces(), new InvocationHandlerImpl(userDao)); userDaoProxy.delete(); userDaoProxy.save(); } }
浙公网安备 33010602011771号