黑马程序员技术交流社区

标题: Java动态代理代码实现 [打印本页]

作者: 经济    时间: 2015-6-6 12:02
标题: Java动态代理代码实现
  1. <p><strong>//接口类代码如下:</strong></p><p>package com.dyn.itheima.test11;

  2. public interface UserDao {

  3.         // 添加数据
  4.         public void add(String data);

  5.         // 删除数据
  6.         public void delete(String data);
  7. }</p><p><strong>//接口类实现代码如下:</strong></p><p>package com.dyn.itheima.test11;</p><p>public class UserImp implements UserDao {</p><p> @Override
  8. public void add(String data) {
  9.   // TODO Auto-generated method stub
  10.   System.out.println(data + " 数据成功!");</p><p> }</p><p> @Override
  11. public void delete(String data) {
  12.   // TODO Auto-generated method stub
  13.   System.out.println(data + " 数据成功!");</p><p> }</p><p>}
  14. <strong>// InvocationHandler 接口实现代码如下:</strong></p><p>package com.dyn.itheima.test11;</p><p>import java.lang.reflect.InvocationHandler;
  15. import java.lang.reflect.Method;</p><p>public class MyInvocationHandler implements InvocationHandler {</p><p> // 构建代理对象
  16. private Object target;</p><p> // 利用构造函数接收要代理的对象
  17. public MyInvocationHandler(Object target) {
  18.   this.target = target;
  19. }</p><p> @Override
  20. public Object invoke(Object proxy, Method method, Object[] args)
  21.    throws Throwable {
  22.   // 动态代理开始
  23.   System.out.println("动态代理开始!");
  24.   // 通过反射调用原方法
  25.   Object result = method.invoke(target, args);
  26.   // 动态代理结束
  27.   System.out.println("动态代理结束!");
  28.   return result;
  29. }
  30. }
  31. <strong>//测试类代码如下:</strong></p><p><strong></strong>package com.dyn.itheima.test11;</p><p>import java.lang.reflect.Proxy;</p><p>public class DynamicProxy {</p><p> public static void main(String[] args) {</p><p>  // 创建用户对象
  32.   UserDao user = new UserImp();
  33.   // 创建调度处理,接收被代理的对象
  34.   MyInvocationHandler handler = new MyInvocationHandler(user);
  35.   // 创建代理对象
  36.   UserDao proxy = (UserDao) Proxy.newProxyInstance(user.getClass()
  37.     .getClassLoader(), user.getClass().getInterfaces(), handler);
  38.   //调用代理的方法
  39.   proxy.add("add");
  40.   proxy.delete("delete");
  41. }
  42. }

  43. </p>
复制代码
由于上面代码详细信息,我在我的博客(http://blog.csdn.net/u012193715)中写过,现在就把主要代码粘下,还望大家积极讨论,



作者: pp7803515    时间: 2015-6-6 12:10
我会去博客看一下的。。:loveliness:
作者: 经济    时间: 2015-6-6 13:13
pp7803515 发表于 2015-6-6 12:10
我会去博客看一下的。。

没想到发上去效果成这样了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2