java 包扫描 —————— 开开开山怪

随笔记:SpringBoot引入第三方jar包并包扫描问题 -------------springboot打包部署---------------------------------------------------------------------------------------------------------------------分割线,下面是SpringBoot打包东西-------------------------------------------3.解决办法,如果A子模块包依赖了B子模块包,在B子模块的pom文件,加入。 阅读详情

包扫描

1.包扫描过程

包扫描事实上就是通过包名称来扫描到该包下该包下的文件夹下的所有class文件,为我们需要处理的.class文件提前提供一个获取.class文件的一个手段。
只需要提供该包的名称便可以扫描到包下所有的.class文件。而事实上包相当于文件夹。
那我们需要做的就是对提供的包名称进行处理,从而做一个工具可以自动扫描到该包下的所有类。

First :

通过包名称得到URL,再根据URL判断该包属于普通包还是jar

Second:

若是普通包,我们需要去做判断,分两种情况
1.该包下直接就是子文件(.class文件)
2.该包下存在子文件夹,那么我们又得将这个文件夹看做是普通包对待,接着判断属于哪两种情况。

其实在这一步采用的是递归的方法,之前对递归也不是很熟练,不知道在什么时候用敌对,对于这一步来是个很好的例子,一个很好的方法理解 ==递归 就是只考虑本层需要干的事情。

对于普通包来说我们最终的目的是要扫描出clas是文件,但此时阻挡我们的是给的包名称可能包含的不是class文件而是一个或多个文件夹,这些文件夹中可能含有class文件,就是一环套一环的感觉。

那我给一个方法就是dealDirectory( String rootName, File curFile).那这个方法来处理普通包,可以看做是我们本层所要分析及实现的,那本层我们需要干的事情就是判断是上述说的两种情况,因为对一个包名称来说无非两种情况,dealDirectory(String rootName, File curFile)需要干的事情就是做两种判断,当curFile文件下是文件夹是调用自己(也就是dealDirectory(),因为此时的文件夹又可以看做时候一个普通包),当curFile文件下是class文件时,直接当做文件处理。

Third :

若是jar包,只有判断出是class文件我们当做文件处理,其他的不做处理

2.代码


public abstract class PackageScanner {
	public PackageScanner() {
	 }
	public abstract void dealClass(Class<?> className);
	private void dealFile(String rootName, File curFile) {
	     String fileName = curFile.getName();
		      
	     if (fileName.endsWith(".class")) {
		fileName = fileName.replace(".class", ""); 
		try {    
		   Class<?> klass = Class.forName(rootName + "." + fileName);
		   dealClass(klass);
	        } catch (Exception e) {
		   e.printStackTrace();
	        }
	      }  
	}
	private void dealDirectory(String rootName, File curFile) {
	 //得到当前curFile中是否含有子文件夹或者文件列表
	      File[] fileList = curFile.listFiles();
		 
	      for(File file : fileList) {	  
		 if (file.isDirectory()) {  
		   dealDirectory("rootName" + file.getName(), file);
		  } else if(file.isFile()){   
		   dealFile(rootName, file);   
		  }
	      }
		 
	}
	private void dealJarPackage(URL url) {
	      try {
		  JarURLConnection connection = (JarURLConnection) url.openConnection();
		  JarFile jarFile = connection.getJarFile();
		  Enumeration<JarEntry> jarEntries = jarFile.entries();
		  while (jarEntries.hasMoreElements()) {
		     JarEntry jar = jarEntries.nextElement();
		   
		     if(jar.isDirectory() || !jar.getName().endsWith(".class")) {
		         continue;
		     }   
		     String jarName = jar.getName(); 
		     jarName = jarName.replace(".class", "");
		     jarName = jarName.replace("/", ".");
		   
		     try {
		        Class<?> klass = Class.forName(jarName);
		        dealClass(klass);
		     } catch (ClassNotFoundException e) {
		         e.printStackTrace();
		     }
		  }
	      } catch (IOException e) {
		  e.printStackTrace();
	      }
	}
	public void scannPackege(String  packegeName) {
	    String rootName = packegeName; 
	    //可以通过将XX.xx.xx转化为xx/xx/xx/
	    //转化为xx/xx/xx/的目的地为了准确得到统一定位url,再通过url判断是file还是jar
	 
	    packegeName = packegeName.replace(".", "/");
	    URL url = Thread.currentThread().getContextClassLoader().getResource(packegeName); 
	    if (url.getProtocol().equals("file")) {
	      //处理普通包
	       try {
	          URI uri = url.toURI();
	          File root = new File(uri); 
	         //root是得到当前packegeName的绝对路径
	          dealDirectory(rootName, root);  
	        } catch (Exception e) {
	            e.printStackTrace();
	        } 
             } else {
	         //处理jar包
	       dealJarPackage(url);
	     } 
	}
}
	
	
	
	```
	
java分发器 及(注解 + 反射机制)—————— 开开开山怪 java分发器 及 (注解 + 反射机制) 引 入: 在C/S框架应用中,当应用层通过点击界面的按钮进行资源的请求的时候,请求的背后代码的实现实际上会自动构成一系列的requst信息请求,由C/S框架内部的communcation层进行消息的发送,服务器通过解析requst请求获取到action(希望服务器端做出的响应)来调用已经配置好的对应的action的方法来进行请求的响应工作,当然这些方法... 阅读详情

相关推荐

CTF信息收集利器:dirsearch目录扫描工具从入门到实战精解

在网络安全领域,信息收集是渗透测试和漏洞挖掘的基石,其核心在于自动化地发现Web应用中的隐藏资产。目录与文件扫描作为信息收集的关键技术,其原理是通过预定义的字典,向目标服务器发送大量请求,根据HTTP状态码(如200、403、301)来识别存在的路径、敏感文件或配置备份。这项技术的价值在于能够高效、系统地暴露开发者无意遗留或错误配置的访问入口,例如后台登录页、源码备份文件或API端点,从而极大地拓宽了攻击面。在CTF竞赛和Web漏洞综合应用测试等实战场景中,熟练运用扫描工具是发现SQL注入、文件上传、SSR

weixin_30608503的博客 382

IDEA jar包依赖一直引用老版本jar包

解决方法:项目结构-->模块 找到你的项目然后把依赖调换顺序。比如现在我lib里边的jar包就是新版本,编译时就不会报错,我把lib1提到前边就会报错。遇到的问题:fastjson 在引用依赖包时引用了老版本的依赖包,老版本依赖包,没有代码中调用的那个方法。导致编译时一直报错。最后,在网上我搜到这个问题,有的说是idea会自动使用低版本的jar包。如果碰到类似的问题可以用我的方法试一下。

qaq99的博客 997

从一次应急响应看JDWP漏洞:攻击者如何利用调试协议拿到服务器Shell

本文深入分析了JDWP协议漏洞如何被攻击者利用进行远程命令执行,导致服务器沦陷的全过程。通过真实案例还原攻击链,揭示调试接口暴露的风险,并提供从痕迹分析到防御策略的完整解决方案,帮助开发者避免类似安全事件。

weixin_30945039的博客 610

Java中包扫描的实现

用过spring框架后知道包扫描是一个非常好用的功能,只需要在某个包下写自己的类,框架就能自动帮我们加载到容器中,从而在各处使用,今天自己来实现一下包扫描。原理其实很简单,就是找到某个目录下的所有class文件,然后使用类加载器加载到jvm中,再使用反射生成一个该类的对象即可。

a141210104的专栏 1661

SRC漏洞挖掘实战:Burp Suite与Nmap安装配置及联动工作流详解

网络安全测试的核心在于高效的信息收集与精准的漏洞探测。信息收集是渗透测试的基石,通过系统性地识别目标资产、开放端口和服务版本,为后续攻击面评估奠定基础。其技术价值在于能将看似无序的网络资产转化为结构化的攻击路径图,极大提升测试效率与成功率。在Web应用安全测试与网络探测场景中,Burp Suite作为代理工具可拦截、修改和重放HTTP/HTTPS请求,而Nmap则通过端口扫描和服务识别来绘制网络拓扑。两者结合,形成了从外围侦查到深度测试的完整链路,是进行SRC漏洞挖掘时不可或缺的**信息收集**与**漏洞验

soyo的专栏 559

探索大数据领域 Hadoop 的分布式计算原理

当我们每天刷短视频产生数GB的行为数据,当电商大促产生亿级订单数据,传统的单台电脑已无法处理这些“数据洪水”。Hadoop作为大数据领域的“开山鼻祖”,正是为解决这类问题而生。本文将聚焦Hadoop的分布式计算原理,覆盖其核心组件(HDFS、MapReduce、YARN)的工作机制、协作关系,以及实际应用中的关键细节。本文将按照“故事引入→核心概念→原理拆解→代码实战→应用场景”的逻辑展开。先通过生活案例建立直观认知,再深入技术细节,最后通过实战巩固理解。HDFS。

2501_92132293的博客 214

java不同的包下相同的类名的问题与解决办法

java不同的包下相同的类名的问题与解决办法

p15097962069的博客 1956

通过PXE的方式实现Ubuntu 24.04 自动安装

之前都是通过PXE来自动化安装Redhat系列的,例如:Rocky9、Rocky10、CentOS7、银河麒麟 Kylin-V10、Kylin-V11、OpenEuler 24.03等。现在安装Ubuntu系列的跟红帽的不太一样,所以在这里介绍下。

邢宇宇的博客 1490

SpringBoot包扫描之多模块多包名扫描和同类名扫描冲突解决

前言 我们在开发springboot项目时候,创建好SpringBoot项目就可以通过启动类直间启动,运行一个web项目,非常方便简单,不像我们之前通过Spring+SpringMvc要运行启动一个web项目还需要要配置各种包扫描和tomcat才能启动 我将应用分成了parent+common+component+app这种模式, parent是一个单纯的pom文件,存放项目的一些公共依赖 common则是一个没有启动类的SpringBoot项目,存放项目的核心公共代码 component各种组件功能服务

daTou 1万+

三、使用HM进行简单的视频隐写demo

三、使用HM进行简单的视频隐写前言一、实验环境二、实验思路三、实验过程3.1 提取原始载体3.2 使用LSB隐写算法进行隐写3.3 放回含密载体3.4 提取含密载体3.5 使用LSB提取算法进行比对四、碰到的问题以及解决思路4.1 块的结构体发生变化4.1.1 产生的原因4.1.2 解决方法4.2 一个有趣的现象4.2.1 产生的原因4.3 视频产生较大失真4.3.1 产生的原因4.3.2 解决方法五、总结 前言 在前两篇博客中介绍了基于HEVC/H.265视频编解码器的视频隐写的基本思路,本文将详细记录

杨酬勤的博客 1792

PCB设计必看:铜皮厚度与载流能力对照表(附Excel计算工具)

本文深入解析了PCB设计中铜皮厚度与载流能力的核心关系,提供了基于IPC-2152标准的动态计算逻辑与实用Excel工具。文章不仅分享了载流对照表,更重点剖析了影响载流能力的关键因素(如铜厚、线宽、温升、布线层),并给出了高电流设计的实战技巧与测试验证方法,帮助工程师规避常见陷阱,实现从理论到实践的闭环设计。

weixin_29228781的博客 721

采用JDBC解释java SPI机制和线程上下文类加载器 —————— 开开开山怪

采用JDBC解释java SPI机制和线程上下文类加载器 先说说SPI(Service Provider Interface),大部分解释是这样的,我简单总结一下就是这样,SPI机制可以做到将服务接口和和真正的服务接口的实现类分开,可以增加程序的可扩展性,通过扫描规定的路径来进行实现类的获取,可以说是一种服务发现机制。 好处就在于,在面向对象的设计中,我们一般建议基于接口的编程,如果代码中涉及到...

String_guai 600

2025年GESP12月认证C++一级真题解析

摘要 本文包含13道C++编程选择题,每题2分,涉及语法、运算符、循环、条件判断等知识点。题目考察了变量命名规则、运算符优先级、赋值语句、循环控制、格式化输出等内容。部分题目解析与标答存在差异,例如第4题逗号表达式输出应为5但标答为4,第6题赋值运算结果应为4 4但标答为3 4等。这些题目适合用于检验基础编程能力,但需注意部分标答可能存在争议,建议结合具体编译环境验证。最后一题考察"漂亮数"判断,要求填写数字某位能被3整除的条件表达式。

lan_in的博客 742

Java搜索引擎--全文检索介绍

一、什么是全文检索 什么叫做全文检索呢?这要从我们生活中的数据说起。 我们生活中的数据总体分为两种:结构化数据和非结构化数据。 结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等。 非结构化数据:指不定长或无固定格式的数据,如 互联网数据、邮件,word文档等。 非结构化数据又一种叫法叫全文数据。 按照数据的分类,搜索也分为两种: 对结构化数据的搜索: 如对数据库的搜索,用SQL语句。...

u011863006的博客 3419

基于ComfyUI+H3的本地化竖屏短剧自动化生成工作流

本文介绍了一种基于ComfyUI和MiniMax H3的本地化竖屏短剧自动化生成工作流。该方案通过纯机械读取分镜总纲表格,实现从文本到视频的全自动生成,支持多人同框稳定输出、人脸一致性保持、音视频同步生成等功能。工作流包含图像生成、人工审核、视频生成和音频处理四个核心环节,采用本地化部署方案避免云端服务的限制和成本问题。文章详细说明了环境部署步骤、必需的自定义节点安装以及显存优化配置,特别针对16GB显存设备提供了量化压缩、GPU独占调度等技术方案,确保系统流畅运行。

huanghm88的专栏 325

Halcon实例转OpenCVSharp--粘连物体分割与计数(基于距离变换+分水岭算法) (附源码)

本文作者Color Space,文章未经作者允许禁止转载! 本文将介绍OpenCVSharp应用实例--粘连物体分割与计数(基于距离变换+分水岭算法)! 本文使用的OpenCVSharp版本---》v4.5.3。 实现目标:将下图中的硬币分割出来并计算数量。 预期效果图: ...

Color Space的博客 2419

面试必备的 23 个JVM 面试真题!

"Write Once , Run Anywhere"。我相信每位Java人对这句话都不陌生,“一次编写,到处运行”,我们说这句话的底气就来自于 JVM(Java Vir...

架构师小秘圈 1002

基于深度学习DNN LSTM网络的光伏发电量预测 完整代码数据 可直接运行

基于深度学习DNN LSTM网络的光伏发电量预测 完整代码数据 可直接运行

2079

Java静态代码分析实战:从FindBugs到SpotBugs的迁移与深度集成指南

静态代码分析是提升软件质量、预防潜在缺陷的关键技术,它通过自动化扫描源代码或字节码,识别出不符合编程规范、可能导致运行时错误或安全漏洞的代码模式。其核心原理是基于预定义的规则集和模式匹配算法,对代码结构进行深度遍历和推理分析。这项技术的价值在于能够在开发早期发现隐藏的Bug,降低测试成本,并统一团队的代码规范。在Java生态中,静态分析工具广泛应用于持续集成、代码评审和质量门禁等场景。本文聚焦于SpotBugs这一专注于Bug模式检测的工具,它继承了FindBugs的成熟规则库,并提供了与Maven、Gra

weixin_30572613的博客 313

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Java反序列化漏洞深度解析:从ROME链原理到实战防御

Java反序列化漏洞是Web安全领域的核心威胁之一,其根源在于ObjectInputStream.readObject()方法允许在对象重构时执行自定义逻辑。攻击者通过构造特定的对象链(Gadget Chain),将反序列化过程转化为危险操作,最终实现远程代码执行(RCE)。ROME链作为经典利用链,巧妙利用ObjectBean和ToStringBean的反射机制,结合TemplatesImpl加载恶意字节码,在众多Java环境中具备极高通用性。理解其触发点、跳板与执行点的协作模式,不仅有助于排查线上服务的

weixin_34216107的博客 403

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

渗透测试入门指南:17款核心工具详解与实战学习路径

渗透测试是网络安全领域系统性的安全评估方法,其核心在于模拟攻击者行为以发现并修复系统漏洞。理解其原理需要掌握从信息收集、漏洞扫描到利用与后渗透的完整攻击链。这项技术的价值在于主动防御,能有效提升企业安全水位,广泛应用于企业安全评估、合规审计与攻防演练等场景。本文聚焦渗透测试工程师必备的实战工具,如Nmap、Metasploit等,并围绕SQL注入、内网渗透等热词,提供从工具使用到原理理解的系统性学习路径与资源指引,帮助初学者构建扎实的知识体系。

weixin_30587927的博客 360

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

SpringBoot项目简单建立

当你接触SpringBoot时,说明你对Java的框架是有了解的,好的下面我们来简单的介绍一下SpringBoot项目的建立。 1.SpringBoot框架是基于maven项目管理工具的。所以在建立SpringBoot框架时,先建立一个maven工程。 maven下载安装本地客户端。如何下载安装可以查看其他人的安装步骤。 使用编译工具eclipse或者spring-tool-suite 都可

qq_35735402的博客 5891

从一次Flask Session伪造攻击,聊聊Web开发中那些容易被忽视的安全配置

本文深入剖析Flask Session伪造攻击的原理与防御策略,通过HCTF赛题和真实案例揭示SECRET_KEY配置、Unicode处理等安全隐患,提供企业级会话安全架构设计、密钥管理方案及防御性编程技巧,帮助开发者构建更安全的Web应用。

weixin_33724570的博客 472

全文搜索技术 Lucene & solr & es (一)Lucene

学习视频地址:https://www.bilibili.com/video/av45567492?from=search&seid=14848044148453483902 本篇博客是基于此学习视频以及课程笔记进行学习 了解什么是全文检索技术? 想明白字典的出现是为了什么? 全文检索技术可以用来做什么? 搜索引擎:百度、谷歌、搜狗等 站内搜索:小说网站、电商网站、...

qq_41965731的博客 1363
上一篇: 【反射机制】与 【xml解析 】之 巧夺天工 —————— 开开开山怪
下一篇: Google中Gson的巧妙使用 —————— 开开开山怪
开开开山怪
博客等级 码龄8年 41粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值