Android插件化开发基础之Java动态代理(proxy)机制的简单例子

举报
chenyu 发表于 2021/07/27 01:59:02 2021/07/27
【摘要】 一、代码 package com.sangfor.tree; import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy; interface ProxyInterFace { public void proxy...

一、代码


   
  1. package com.sangfor.tree;
  2. import java.lang.reflect.InvocationHandler;
  3. import java.lang.reflect.Method;
  4. import java.lang.reflect.Proxy;
  5. interface ProxyInterFace {
  6. public void proxyMethod();
  7. }
  8. class TargetObject implements ProxyInterFace {
  9. public void proxyMethod() {
  10. System.out.println("我被代理了,哈哈!");
  11. }
  12. }
  13. class ProxyObject implements InvocationHandler {
  14. //代码的对象
  15. public Object targetObject;
  16. public void setTargetObject(Object targetObject) {
  17. this.targetObject = targetObject;
  18. }
  19. public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
  20. //调用,传入一个目标对象,和对应的对象参数
  21. System.out.println("代理前 你可以做的事情");
  22. Object object = method.invoke(targetObject, args);
  23. System.out.println("代理后 你可以做的事情");
  24. return object;
  25. }
  26. }
  27. public class ProxyDemo {
  28. public static void main(String[] args) {
  29. //代理的目标对象
  30. ProxyInterFace target = new TargetObject();
  31. //代理器
  32. ProxyObject proxy = new ProxyObject();
  33. proxy.setTargetObject(target);
  34. //需要传进函数的handler
  35. InvocationHandler handler = proxy;
  36. //生存新的代理对象
  37. Object newProxyObject = Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), handler);
  38. //新的代理对象执行方法
  39. ((ProxyInterFace)newProxyObject).proxyMethod();
  40. }
  41. }

二、结果


   
  1. 代理前 你可以做的事情
  2. 我被代理了,哈哈!
  3. 代理后 你可以做的事情

 
 
 

文章来源: chenyu.blog.csdn.net,作者:chen.yu,版权归原作者所有,如需转载,请联系作者。

原文链接:chenyu.blog.csdn.net/article/details/53185210

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。