Android插件化开发基础之Java动态代理(proxy)机制的简单例子
一、代码
package com.sangfor.tree;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;interface ProxyInterFace { public void proxyMethod();
} class TargetObject implements ProxyInterFace { public void proxyMethod() { System.out.println("我被代理了,哈哈!"); }
} class ProxyObject implements InvocationHandler { //代码的对象 public Object targetObject; public void setTargetObject(Object targetObject) { this.targetObject = targetObject; } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { //调用,传入一个目标对象,和对应的对象参数 System.out.println("代理前 你可以做的事情"); Object object = method.invoke(targetObject, args);System.out.println("代理后 你可以做的事情"); return object;}
} public class ProxyDemo { public static void main(String[] args) { //代理的目标对象 ProxyInterFace target = new TargetObject();//代理器 ProxyObject proxy = new ProxyObject();proxy.setTargetObject(target);//需要传进函数的handlerInvocationHandler handler = proxy;//生存新的代理对象Object newProxyObject = Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), handler);//新的代理对象执行方法((ProxyInterFace)newProxyObject).proxyMethod();}
}
二、结果
代理前 你可以做的事情
我被代理了,哈哈!
代理后 你可以做的事情
Android插件化开发基础之Java动态代理(proxy)机制的简单例子相关推荐
- Android插件化开发基础之Java类加载器与双亲委派模型
类加载器 Java虚拟机类加载过程是把Class类文件加载到内存,并对Class文件中的数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的java类型的过程. 在加载阶段,java虚拟机需 ...
- Android插件化开发基础之Java反射机制研究
一.获得Class对象 Class<?> c = Class.forName("classname"); 抛出ClassNotFoundException 二.获得实现 ...
- Android插件化开发基础之App如何动态加载类
在 Java 里面,我们可以把一些类放到 .jar 文件里面,然后用 ClassLoader 动态加载.例如: URLClassLoader ucl = URLClassLoader.newInsta ...
- Android插件化开发基础之静态代理模式
一 Proxy模式 意图: 为其他对象提供一种代理以控制这个对象的访问. 适用性: l 远程代理( Remote Proxy ): 为一个对象在不同的地址空间提供局部代表. l 虚代理(Virtu ...
- Android插件化开发之动态加载本地皮肤包进行换肤
Android插件化开发之动态加载本地皮肤包进行换肤 前言: 本文主要讲解如何用开源换肤框架 android-skin-loader-lib来实现加载本地皮肤包文件进行换肤,具体可自行参考框架原理进行 ...
- Android插件化开发指南——Hook技术(一)【长文】
文章目录 1. 前言 2. 将外部dex加载到宿主app的dexElements中 3. 插件中四大组件的调用思路 4. Hook 2.1 对startActivity进行Hook 2.1.1 AMS ...
- Android插件化开发指南——插件化技术简介
文章目录 1. 为什么需要插件化技术 2. 插件化技术的历史 3. 插件化实现思路 3.1 InfoQ:您在 GMTC 中的议题叫做<Android 插件化:从入门到放弃>,请问这个标题代 ...
- Android插件化开发之解决OpenAtlas组件在宿主的注冊问题
Android插件化开发之解决OpenAtlas组件在宿主的注冊问题 OpenAtlas有一个问题,就是四大组件必须在Manifest文件里进行注冊,那么就必定带来一个问题,插件中的组件都要反复在宿主 ...
- Android插件化开发指南——实践之仿酷狗音乐首页
文章目录 1. 前言 2. 布局分析 3. 底部导航栏的实现 4. 顶部导航栏和ViewPager+Fragment的关联 1. 前言 在Android插件化开发指南--2.15 实现一个音乐播放器A ...
最新文章
- C++ - 编写一个从字符串转变成长整型的函数
- 开课吧python视频百度云-做摄影2年,工资5000,兼职2W...
- 牛客-小w的魔术扑克【并查集】
- java8 streams_Java 8 Streams API作为友好的ForkJoinPool外观
- SAS宏保存以便快速调用的三种解决方案(转载)
- php中函数前加符号的作用分解
- 华为云数据库首席架构师:关于数据库他这样说……
- 阿里巴巴超越腾讯重新成为中国市值最高上市公司!
- BZOJ2654 Tree
- flutter 防止键盘弹出 导致超出屏幕
- LinuxC语言のUDP简易聊天室 sokcet
- SVM支撑向量机原理
- tensorflow 2.5.0 ( keras )搭建wgan-gp 和 div
- 【严蔚敏数据结构题集】C/C++编程线性表练习题(一)
- 助力疫情防控,无接触式Beacon蓝牙考勤打卡方案
- Android usb网卡配置ip地址,安卓手机通过电脑USB上网设置教程
- VBS播放WMP文件
- 商业智能BI全解析,探寻BI本质与发展趋势
- 用VHDL编写testbench激励文件
- 室内定位技术及机场方案建议
热门文章
- docker-compose 一键部署分布式配置中心Apollo
- Blazor 模板化组件开发指南
- 2020.NET开发者大会大会线上同步直播,以及参会秘籍
- 【BCVP更新】StackExchange.Redis 的异步开发方式
- 程序员还有35岁的坎吗?
- 合集| 21 篇技术文章,带你从零入门 K8s
- 提高文档翻译效率神器:VS Code 插件之 Translator Helper
- 2020年你应该学习 .Net Core
- 微软宣布SQL Server 2019免费支持Java
- 微软推出了Cloud Native Application Bundles和开源ONNX Runtime