王学岗ASM
服务发现
package com.example.testasm;import android.content.Context;
import android.os.Bundle;import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;import com.example.testasm.celuemoshi.Content;
import com.example.testasm.celuemoshi.SPIService;
import com.example.testasm.celuemoshi.SpiServiceImpl2;import java.util.Iterator;
import java.util.ServiceLoader;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);
// Content content = new Content(new SpiServiceImpl2());
// content.executeSpiService();ServiceLoader<SPIService> load = ServiceLoader.load(SPIService.class);//可以迭代文本文件中所有的实现类,新建文件需要与java同级目录(main-新建directory-resource)//同样方法创建META-INF和services文件夹,接着创建文件包名+类名(该文件中就写服务的实现类)//当读取到这些文件的实现类后,使用反射得到这些类Iterator<SPIService> iterator = load.iterator();//LazyIterator//查找所有的实现类while(iterator.hasNext()){//获取文本文件的内容,得到需要实现类的名字SPIService spiService = iterator.next();//反射注入实现类的对象spiService.execute();//执行实现类中的方法}}
}
package com.example.testasm.celuemoshi;public interface SPIService {void execute();
}
package com.example.testasm.celuemoshi;import android.util.Log;public class SpiServiceImpl1 implements SPIService{@Overridepublic void execute() {Log.i("赵云","第一种执行方法");}
}
package com.example.testasm.celuemoshi;import android.util.Log;public class SpiServiceImpl2 implements SPIService{@Overridepublic void execute() {Log.i("赵云","第二种执行方法");}
}
package com.example.testasm.celuemoshi;import android.util.Log;public class SpiServiceImpl3 implements SPIService{@Overridepublic void execute() {Log.i("赵云","第三种执行方法");}
}
com.example.testasm.celuemoshi.SPIService文件
com.example.testasm.celuemoshi.SpiServiceImpl1
com.example.testasm.celuemoshi.SpiServiceImpl2
com.example.testasm.celuemoshi.SpiServiceImpl3

这个框架有个好处,如果以后我们新增加第四个实现类,只需要在com.example.testasm.celuemoshi.SPIService文件中增加一个包名+类名即可,其它地方不需要改变
ASM
首先暗转插件:ASM Bytecode Viewer

1,逆波兰表达式 (后缀表达式)
dependencies {implementation 'org.ow2.asm:asm:9.3' // 最新版本可以根据需要调整implementation 'org.ow2.asm:asm-util:9.3'implementation 'org.ow2.asm:asm-commons:9.3'implementation 'org.ow2.asm:asm-tree:9.3'
}
基本流程
首先准备class文件,文件准备好后,用流绑定ClassReader。文件的信息就会被读取到ClassReader中,然后进行Class信息的修改(accept()),修改后的结果填充到ClassWriter中,输出到byte[]。byte[]就是修改后的文件
相关文章:
王学岗ASM
服务发现 package com.example.testasm;import android.content.Context; import android.os.Bundle;import androidx.activity.EdgeToEdge; import androidx.appcompat.app.AppCompatActivity; import androidx.core.graphics.Insets; import androidx.core.view.ViewCompat;…...
【数据结构】—— 队列
1、队列的概念2、队列的结构如何选择合适的数据结构实现队列(数组or链表) 3、队列的链式存储3.1 队列的链式存储结构3.2 队列的常见接口3.3 队列的接口实现初始化判空入队列出队列获取队头元素获取队尾元素获取节点个数销毁 3.4 源代码 4、队列的顺序存储…...
vue中openlayers过滤高亮显示某个图层
vue中openlayers过滤高亮显示某个图层 openlayers库没有直接支持这样设置,所以可以使用库:ol-ext,地址:https://viglino.github.io/ol-ext/examples/filter/map.filter.crop.html 效果: 关键代码: /**…...
WPF篇(11)-ToolTip控件(提示工具)+Popup弹出窗口
ToolTip控件 ToolTip控件继承于ContentControl,它不能有逻辑或视觉父级,意思是说它不能以控件的形式实例化,它必须依附于某个控件。因为它的功能被设计成提示信息,当鼠标移动到某个控件上方时,悬停一会儿,…...
【mysql 第一篇章】系统和数据库的交互方法
一、宏观的查看系统怎么和数据库交互 在我们刚刚接触系统和数据库的时候不明白其中的原理,只知道系统和数据库是需要交互的。所以我们会理解成上图的形式。 二、MYSQL 驱动 随着我们的学习时间的加长以及对程序的了解,发现链接数据库是需要有别的工具辅…...
数据结构-位运算总结
位运算总结: 1.求位1的个数 191. 位1的个数 - 力扣(LeetCode) 有两种写法: 1.是把该数不断的去与0x1相与,得到该数的最后一位的值,然后判断他是不是1,再把该数更新一下整体往后移动一位也就…...
java 异常堆栈的由来
编写的程序代码内部错误产生的异常,如调用对象为空(空指针异常)、数组越界异常、除0异常等。这种通常称为未检查的异常(Runtime异常子类),在虚拟机中执行时会集中处理这些异常。其他运行中异常,通过throw语句主动抛出的…...
【推荐系统】【多任务学习】Progressive Layered Extraction (PLE)
Progressive Layered Extraction (PLE): A Novel Multi-Task Learning (MTL) Model for Personalized Recommendations 文章目录 Progressive Layered Extraction (PLE): A Novel Multi-Task Learning (MTL) Model for Personalized Recommendations1 论文出处2 背景2.1 背景介…...
java -转win32/win64免安装jre环境运行
由于java 转为exe,只能在装有JDK环境的电脑运行, 发给其他人也不能运行,缺少环境,程序自己背着jre走 1.先打好jar 包 2.使用exe4j 把jar包转成exe 运行程序 3.使用inno stup ,把exe运行程序加上jre环境 以下是具体实现…...
算法板子:容斥原理——求出 1∼n 中能被质数 p1,p2,…,pm 中的至少一个数整除的整数有多少个
1. 题目要点 1. 设:求1~10中能被质数2和3中至少一个数整除的数有多少个。1~10中能被质数2整除的数的集合记为S1{2,4,6,8,10},能被质数3整除的数的集合记为S2{3,6,9},能同时被质数2和3整数的数的集合为S1∩S2{6} 2. 这道题的目的是求S1∪S2∪S…...
用gurobipy求解带不等式约束条件的优化问题
1. 引入 在当今的数据驱动世界中,优化问题无处不在,从工程设计到经济模型,再到机器学习算法的调参,优化都是实现效率最大化、成本最小化或性能最优化的关键工具。 这里有一个典型的数学优化问题,目标是在给定的约束条…...
漏洞复现-Adobe ColdFusion 远程代码执行漏洞(CVE-2023-38203)
1.漏洞描述 Adobe ColdFusion是一种服务器端的Web应用开发平台。它由Adobe Systems开发,用于创建动态的、交互式的Web应用程序和网站。 Adobe ColdFusion在2018u17及之前版本、2021u7及之前版本和2023u1及之前版本中存在任意代码执行漏洞。该漏洞是由于反序列化不…...
Spring-MyBatis整合:No qualifying bean of type ‘XXX‘ available: ...
1.看一下核心配置中有没有导入myBatis配置 2.看一下service和dao有没有相应注解 3.看一下MyBatisConfig中有没有对sqlSessionFactory和mapperScannerConfigurer注释成bean对象以及有没有配置映射文件路径...
gitea docker 快捷安装部署
前言 在前一篇博文(什么是 Gitea?)中,我们详细介绍了gitea的功能特性,以及其与其它git服务器之间的特性多维度对比。 在本文中,我们将详细介绍gitea的快捷安装部署,docker方式! 1…...
CLAMP-1
一、信息收集 1、主机发现 nmap 192.168.236.0/24 2、端口扫描 nmap 192.168.236.173 -p- -A 3、目录扫描 dirb http://192.168.236.173 二、漏洞探测 访问80端口 访问 /nt4stopc/ 下面有一些问题,提示必须收集答案 都是一些判断题,对与错对应1与0&…...
Blender的Python编程介绍
在Blender这个免费的开源3D设计软件中,最值得称道的一点是可以用Python程序来辅助进行3D设计,我们可以通过Python来调整物体的属性,生成新的物体,甚至生成新的动画等等。 在最近的一个项目中,我用Blender制作了一个动…...
树莓派4/5:运行Yolov5n模型(文末附镜像文件)
〇、前言 因国内网络问题,可直接烧录文末镜像文件,或者按照本教程进行手动操作。 一、实验目的 在树莓派4B运行Yolov5n模型。 二、实验条件 1、Windows 11计算机:安装了Mobaxterm 2、树莓派4B:64Bit Lite OS,安装了…...
【学习笔记】Day 9
一、进度概述 1、inversionnet_train 试运行——成功 二、详情 1、inversionnet_train 试运行 在经历了昨天的事故后,今天最终成功运行了 inversionnet_train,运行结果如下: 经观察,最开始 loss 值大概为 0.5 左右 随着训练量的增…...
Linux网络案例
网络配置基础 WIN10上安装虚拟机,虚拟机里安装CENTOS6.5。 1)网络配置的步骤 (1)CENTOS6.5C网络设置: su root //切换root用户 cd /etc/sysconfig/network-scripts //进入网卡配置文件所在目录 vi ifcfg-eth0 //修改网卡配置文件 …...
苹果离线打包机配置和打包
1、虚拟机安装 macOS虚拟机安装全过程(VMware)-腾讯云开发者社区-腾讯云 给 windows 虚拟机装个 mac 雪之梦 1、安装苹果镜像 去网上下载,打包机的镜像要和自己mac电脑上的保持一致。 同时打包机的用户名也需要和自己的mac保持一致。 2、…...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
1. 开发环境准备 安装DevEco Studio 3.1: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK 项目配置: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...
