java动态代理的实现

墨蓝 2022-07-27 11:39 323阅读 0赞
  1. <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">java动态代理的实现:</span>
  2. <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">
  3. </span>

首先上一张代码结构图:

Center

代码:

  1. package com.test.interf;
  2. public interface UserDao {
  3. public int add(int x,int y);
  4. }
  5. package com.test.impli;
  6. import com.test.interf.UserDao;
  7. public class UserDaoImpl implements UserDao {
  8. @Override
  9. public int add(int x, int y) {
  10. int sum = x + y;
  11. return sum;
  12. }
  13. }
  14. package com.test.proxy;
  15. import java.lang.reflect.InvocationHandler;
  16. import java.lang.reflect.Method;
  17. import java.lang.reflect.Proxy;
  18. import java.util.Arrays;
  19. import com.test.interf.UserDao;
  20. public class UserProxy {
  21. private UserDao target;
  22. public UserProxy(UserDao target) {
  23. super();
  24. this.target = target;
  25. }
  26. public UserDao getUserProxy() {
  27. UserDao proxy = null;
  28. ClassLoader loader = target.getClass().getClassLoader();
  29. Class[] interfaces = new Class[]{UserDao.class};
  30. InvocationHandler h = new InvocationHandler() {
  31. @Override
  32. public Object invoke(Object proxy, Method method, Object[] args)
  33. throws Throwable {
  34. String methodName = method.getName();
  35. System.out.println("start \\\\ methodName is:::::"+methodName + " args is::"+Arrays.toString(args));
  36. Object result = null;
  37. result = method.invoke(target, args);
  38. System.out.println("end \\\\");
  39. return result;
  40. }
  41. };
  42. proxy = (UserDao) Proxy.newProxyInstance(loader, interfaces, h);
  43. return proxy;
  44. }
  45. }
  46. package com.test.test;
  47. import com.test.impli.UserDaoImpl;
  48. import com.test.interf.UserDao;
  49. import com.test.proxy.UserProxy;
  50. public class Main {
  51. public static void main(String[] args) {
  52. UserDao ud = new UserDaoImpl();
  53. ud = new UserProxy(ud).getUserProxy();
  54. ud.add(1, 2);
  55. }
  56. }

运行结果:

start \\ methodName is:::::add args is::[1, 2]
end \\

发表评论

表情:
评论列表 (有 0 条评论,323人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java动态代理实现

      在java的动态代理机制中,有两个重要的类和接口,一个是 InvocationHandler(Interface)、另一个则是 Proxy(Class),这一个类和接口是实