当前位置: 首页 > news >正文

spring中手写注解开发(创建对象篇)

说明:

        在spring底层中并不是我写的如此,这篇只是我用我自己的方式实现了使用注解组件扫描并且

        创建对象,方法并不是很难,可以看一看,欢迎大佬评论


第一步:

        我们需要自己写一个注解,我用的是idea直接创建一个注解即可

//该注解说明它可以出现的范围value值为数组类型
//在使用注解时如果他的属性名是value时value可以省略
//如果属性值是数组类型且只有一个元素时大括号也可以省略
@Target(
value={ElementType.TYPE,ElementType.FIELD}
)@Rentation(RentationPolicy.RUNTIME)
public @interface Component{
//String是属性类型,一个是属性名String value() default "";
}

 写这个注解就是以后扫描到这个注解就创建对象


第二步:

创建三个类用于测试

@Component("A")
public class A{public A(){System.out.println("A类被创建了");}
}
@Component("B")
public class B{public B(){System.out.println("B类被创建了");}
}
@Component("C")
public class C{public C(){System.out.println("A类被创建了");}
}

 

第三步:

现在来编写需要运行的类

public class test{
public static void main(String[] args){//先创建一个map集合先将扫描到的对象暴漏(创建)放在map集合中Map<String,Object> beanMap = new HashMap<String,Object>//给一个路径,这里给的是类的根路径下的包,具体路径看你自己类的位置String path = "com.mySpring.Annotation";//将路径里面的.换成/,在正则表达式里面.表示所有,所以不能直接写.//\.表达的是点,要转义所以用\\.表示String realPath = path.replaceAll("\\.","/");//获取你要扫描文件的绝对路径,这里返回url对象URL url = ClassLoader.getSystemClassLoader().getResource(realPath);String allPath = url.getPath();//获取绝对路径下的所有文件File file = new File(allPath);File[] files = file.listFiles();//循环遍历文件Arrays.stream(files).forEach(f -> {try{//获取类路径,使用反射创建对象String className = path+"."+f.getName().split("\\.")[0];Class<?> aClass = Class.forname("className");//判断类上是否有注解if(aClass.isAnnotationPresent(Component.class)){//获取Component组件对象Component component = aClass.getAnnotation(Component.class);//获取id也就是value值String id = component.value();//获取当前对象Object obj = aClass.newInstance();//添加到map集合中beanMap.put(id,obj);}}catch(Exception e){e.printStackTrace();}});//最终查看一下map集合System.out.println(beanMap);}}

第四步:

运行结果如图

注:

        在这里并没有写xml文件这一步,只是模拟,开局就已经给了path包的路径

相关文章:

spring中手写注解开发(创建对象篇)

说明&#xff1a; 在spring底层中并不是我写的如此&#xff0c;这篇只是我用我自己的方式实现了使用注解组件扫描并且 创建对象&#xff0c;方法并不是很难&#xff0c;可以看一看&#xff0c;欢迎大佬评论 第一步&#xff1a; 我们需要自己写一个注解&#xff0c;我用的是idea…...

DeepSeek进入开源周,分享几点关于开源的思考

最近DeepSeek进入开源周&#xff0c;又把差点被大众遗忘在角落的开源话题拉了出来。 作为一个开源作者&#xff0c;也分享几点关于开源的思考。 AI对开源的影响 开源项目遇到的最大困难 开源项目不应该商业化 你的开源项目是垃圾...

大模型训练中的数据不平衡问题及其解决策略

目录 大模型训练中的数据不平衡问题及其解决策略 一、数据不平衡问题的影响 二、处理数据不平衡问题的方法 1. 过采样&#xff08;Oversampling&#xff09; 2. 欠采样&#xff08;Undersampling&#xff09; 3. 代价敏感学习&#xff08;Cost-Sensitive Learning&#xf…...

本地部署DeepSeek R1满血版大模型

一、前言 老周上一篇分享了《本地部署DeepSeek R1大模型》&#xff0c;本地受硬件条件限制&#xff0c;只跑了80亿参数量的模型。 1.5b模型基本可以在大部分个人电脑甚至手机中运行&#xff0c;如果你有 6G 显存以上&#xff0c;那么可以部署7b模型&#xff0c;如果有16G显存&…...

外发抄板SCH与PCB检查系列

外发抄板SCH与PCB检查系列 一、检查到手的文件二、PCB与原理图的对应检查1.为什么要查SCH与Pcbdoc的对应&#xff1f;2.查询方法 三、PCB与实物的信号对应检查 一、检查到手的文件 外发出去两块板子&#xff1a;控制板与功率板。 抄板机构返回的文件&#xff1a; 1.互相独立的…...

EX_25/2/25

编写一个如下场景&#xff1a; 有一个英雄Hero类&#xff0c;私有成员&#xff0c;攻击&#xff0c;防御&#xff0c;速度&#xff0c;生命值&#xff0c;以及所有的set get 方法 编写一个 武器 Weapon 类&#xff0c;拥有私有成员攻击力&#xff0c;以及set get 方法 编写一个…...

C# 打印Word文档 – 4种打印方法

Word文档是日常办公和学习中不可或缺的一部分。比如在商务往来中&#xff0c;经常需要打印 Word 文档用于撰写和传递正式的商务信函、合作协议、项目提案等。打印出来的文档便于双方签字盖章&#xff0c;具有法律效力和正式性。本文将提供以下4种通过C# 打印Word文档的方法&…...

ROS的action通信——实现阶乘运算(一)

在ROS中除了常见的话题(topic&#xff09;通信、服务(server)通信等方式&#xff0c;还有action通信这一方式&#xff0c;由于可以实时反馈任务完成情况&#xff0c;该通信方式被广泛运用于机器人导航等任务中。本文将通过三个小节的分享&#xff0c;实现基于action通信的阶乘运…...

Mac 上安装多版本的 JDK 且实现 自由切换

1.可以通过查看以下目录中的内容&#xff0c;确认当前已经安装的 jdk 版本。 cd /Library/Java/JavaVirtualMachines2.命令行查看 jdk 的安装路径 /usr/libexec/java_home -V3.下载要安装的jdk版本&#xff0c;修改环境变量( cat ~/.bash_profile) # 定义JDK 8和JDK 17的安装路…...

网络编程套接字

目录 一、认识端口号 二、端口号和进程ID 三、TCP/UDP协议 四、网络字节序 五、socket编程接口 5.1socket的常见API 5.2socketaddr结构 六、简单的UDP程序 七、地址转换函数 八、简单的TCP网络程序 九、Tcp协议通讯流程 9.1基于TCP协议的客户端/服务器程序的一般流…...

45.matlab产生正弦叠加信号

&#xff0c;...

Java23种设计模式案例

目录 一、概述 二、创建型模式 (Creational Patterns) 单例模式 (Singleton Pattern) 工厂方法模式 (Factory Method Pattern) 抽象工厂模式 (Abstract Factory Pattern) 建造者模式 (Builder Pattern) 原型模式 (Prototype Pattern) 三、结构型模式 (Structu…...

计算机毕业设计程序,定制开发服务

我们擅长的开发语言包括Python、C、Golang、Java&#xff0c;以及前端技术如HTML、CSS、JS和Vue。我们的服务内容丰富&#xff0c;能够满足您各种需求&#xff0c;无论是简单的功能开发还是复杂的定制项目&#xff0c;我们都能为您提供专业支持。若有具体需求可联系作者。 链接…...

AI提示词的种类与适合的任务

以下是提示词的主要种类及其适用任务&#xff0c;基于大模型特性与最佳实践总结&#xff1a; 一、基础提示词 零样本提示&#xff08;Zero-shot Prompting&#xff09; 形式&#xff1a;直接输入任务指令&#xff0c;不提供示例&#xff08;如“翻译以下句子&#xff1a;Hello …...

【Kimi】自动生成PPT-并支持下载和在线编辑--全部免费

【Kimi】免费生成PPT并免费下载 用了好几个大模型&#xff0c;有些能生成PPT内容&#xff1b; 有些能生成PPT&#xff0c;但下载需要付费&#xff1b; 目前只有Kimi生成的PPT&#xff0c;能选择模板、能在线编辑、能下载&#xff0c;关键全部免费&#xff01; 一、用kimi生成PP…...

Maven环境搭建

Maven 1. 概述 ApacheMaven是一个软件项目管理和构建工具。基于项目对象模型&#xff08;POM&#xff09;的概念&#xff0c;Maven可以从中心信息中管理项目的构建、报告和文档 理解: maven构建项目&#xff08;100%&#xff09;而且帮你完成jar的统一管理。 思考: 原来的jar—…...

Vue面试题

Vue面试题 Vue2.0的生命周期&#xff0c;每个生命周期分别做了哪些事情 create阶段&#xff1a;vue实例被创建。 beforeCreate: 创建前&#xff0c;此时data和methods中的数据都还没有初始化&#xff1b; created&#xff1a;创建完毕&#xff0c;data中有值&#xff0c;未…...

Linux时间日期类指令

1、data指令 基本语法&#xff1a; date &#xff1a; 显示当前时间date %Y : 显示当前年份date %m &#xff1a; 显示当前月份date %d &#xff1a; 显示当前哪一天date “%Y-%m-%d %H:%M:%S" &#xff1a; 显示年月日时分秒date -s 字符串时间 &#xff1a; 设置系统时…...

国标28181协议在智联视频超融合平台中的接入方法

一. 国标28181介绍 国标 28181 协议全称是《安全防范视频监控联网系统信息传输、交换、控制技术要求》&#xff0c;是国内视频行业最重要的国家标准&#xff0c;目前有三个版本&#xff1a; 2011 年&#xff1a;推出 GB/T 28181-2011 版本&#xff0c;为安防行业的前端设备、平…...

pyautogui库的screenshot()函数

# 方法一 screenshot pyautogui.screenshot() screenshot.save("screenshot.png")# 方法二 # 获取屏幕分辨率 screen_width, screen_height pyautogui.size()# 截取桌面屏幕 screenshot pyautogui.screenshot(region(0, 0, screen_width, screen_height)) screens…...

python与C系列语言的差异总结(3)

与其他大部分编程语言不一样&#xff0c;Python使用空白符&#xff08;whitespace&#xff09;和缩进来标识代码块。也就是说&#xff0c;循环体、else条件从句之类的构成&#xff0c;都是由空白符加上冒号(:)来确定的。大部分编程语言都是使用某种大括号来标识代码块的。下面的…...

《Linux系统编程篇》System V信号量实现生产者与消费者问题(Linux 进程间通信(IPC))——基础篇(拓展思维)

文章目录 &#x1f4da; **生产者-消费者问题**&#x1f511; **问题分析**&#x1f6e0;️ **详细实现&#xff1a;生产者-消费者****步骤 1&#xff1a;定义信号量和缓冲区****步骤 2&#xff1a;创建信号量****步骤 3&#xff1a;生产者进程****步骤 4&#xff1a;消费者进程…...

Jmeter接口并发测试

Apache JMeter 是一款开源的性能测试工具&#xff0c;广泛用于接口并发测试、负载测试和压力测试。以下是使用 JMeter 进行接口并发测试的详细步骤&#xff1a; 一、准备工作 安装 JMeter 下载地址&#xff1a;Apache JMeter 官网 确保已安装 Java 环境&#xff08;JMeter 依…...

Python--内置函数与推导式(上)

1. 匿名函数 Lambda表达式基础 语法&#xff1a;lambda 参数: 表达式​ 特点&#xff1a; 没有函数名&#xff0c;适合简单逻辑函数体只能是单行表达式自动返回表达式结果 # 示例1&#xff1a;加法 add lambda a, b: a b print(add(3, 5)) # 输出 8# 示例2&#xff1a;字…...

Python爬虫实战:获取六图网漫画图

注意:以下内容仅供技术研究,请遵守目标网站的robots.txt规定,控制请求频率避免对目标服务器造成过大压力! 一、引言 Python 作为一种广泛应用于数据处理和网络爬虫领域的编程语言,拥有丰富的库和框架。其中,Scrapy 框架以其高效、灵活、可扩展等特点,成为构建爬虫程序的…...

《人工智能之高维数据降维算法:PCA与LDA深度剖析》

在人工智能与机器学习蓬勃发展的当下&#xff0c;数据处理成为关键环节。高维数据在带来丰富信息的同时&#xff0c;也引入了计算复杂度高、过拟合风险增大以及数据稀疏性等难题。降维算法应运而生&#xff0c;它能将高维数据映射到低维空间&#xff0c;在减少维度的同时最大程…...

第2课 树莓派镜像的烧录

树莓派的系统通常是安装在SD卡上的‌。SD卡作为启动设备&#xff0c;负责启动树莓派并加载操作系统。这种设计使得树莓派具有便携性和灵活性&#xff0c;用户可以通过更换SD卡来更换操作系统或恢复出厂设置。 烧录树莓派的镜像即是将树莓派镜像烧录到SD卡上&#xff0c…...

网络安全复习资料

网络安全复习资料 1.计算机网络安全是指保持网络中的硬件、软件系统正常运行&#xff0c;使他们不因自然和人为的因素而受到破坏、更改和泄露。 2.网络安全&#xff1a;物理安全&#xff0c;软件安全&#xff0c;信息安全&#xff0c;运行安全。 3.安全防范措施&#xff1a…...

PIG框架学习5——动态路由实现

一、前言 参考PIGX官方文档&#xff1a;https://www.yuque.com/pig4cloud/pig/ggnc3e 1.1 说明 在微服务中&#xff0c;定义路由一般是在网关gateway对应的配置文件中进行定义声明的&#xff0c;PIGX框架下&#xff0c;如何通过动态路由实现网关路由的实时更新&#xff1f; 实…...

vscode设置自动换行

vscode设置自动换行 方法 方法 点击文件->首选项->设置。搜索word wrap -> 选择 on 。 搜索Word Wrap&#xff0c;并把选项改为on。...

Flutter-升级Xcode后构建iOS报错

代码什么都没改动&#xff0c;貌似只是升级了下Xcode&#xff0c;构建iOS就一直报错&#xff0c;错误有时候还不一样。 Swift Compiler Error (Xcode): Unable to rename temporary /Users/admin/Library/Developer/Xcode/DerivedData/ModuleCache.noindex/2ZBFEEPIDQ0EY/Core…...

架构思维:架构的演进之路

文章目录 引言为什么架构思维如此重要架构师的特点软件架构的知识体系如何提升架构思维大型互联网系统架构的演进之路一、大型互联网系统的特点二、系统处理能力提升的两种途径三、大型互联网系统架构演化过程四、总结 引言 在软件开发行业中&#xff0c;有很多技术人可能会问…...

ElasticSearch公共方法封装

业务场景 1、RestClientBuilder初始化&#xff08;同时支持单机与集群&#xff09; 2、发送ES查询请求公共方法封装&#xff08;支持sql、kql、代理访问、集群访问、鉴权支持&#xff09; 3、判断ES索引是否存在&#xff08;/_cat/indices/${indexName}&#xff09; 4、判断ES…...

[Web 信息收集] Web 信息收集 — 手动收集 IP 信息

关注这个专栏的其他相关笔记&#xff1a;[Web 安全] Web 安全攻防 - 学习手册-CSDN博客 0x01&#xff1a;通过 DNS 服务获取域名对应 IP DNS 即域名系统&#xff0c;用于将域名与 IP 地址相互映射&#xff0c;方便用户访问互联网。对于域名到 IP 的转换过程则可以参考下面这篇…...

多源最短路径求解: Floyd-Warshall算法和Johnson 算法

多源最短路径问题是图论中的一个经典问题, 它要求找到图中所有顶点对之间的最短路径. 这个问题可以通过几种不同的算法来解决, 其中最为著名的包括 Floyd-Warshall Algorithm 和 Johnson’s Algorithm. Floyd-Warshall 算法 弗洛伊德-沃沙尔算法(Floyd-Warshall Algorithm) 是…...

解决IDEA使用Ctrl + / 注释不规范问题

问题描述&#xff1a; ctrl/ 时&#xff0c;注释缩进和代码规范不一致问题 解决方式 设置->编辑器->代码样式->java->代码生成->注释代码...

第9章 机器学习与统计模型

这一章重点探讨统计模型和机器学习模型&#xff0c;两个大的主题都建立在数据的基础之上&#xff0c;所以要熟练掌握对数据的处理与分析。实际上&#xff0c;机器学习本身就是统计模型的延伸&#xff0c;是在大数据背景下传统统计方法捉襟见肘了&#xff0c;所以才考虑引入机器…...

基于MATLAB的OFDM通信系统仿真设计

下面将为你详细介绍基于MATLAB的OFDM通信系统仿真设计的步骤和示例代码。 1. OFDM系统原理概述 正交频分复用&#xff08;OFDM&#xff09;是一种多载波调制技术&#xff0c;它将高速数据流通过串并转换&#xff0c;分配到多个正交的子载波上进行传输&#xff0c;这样可以有效…...

WebRTC学习七:WebRTC 中 STUN 协议详解

系列文章目录 第一篇 基于SRS 的 WebRTC 环境搭建 第二篇 基于SRS 实现RTSP接入与WebRTC播放 第三篇 centos下基于ZLMediaKit 的WebRTC 环境搭建 第四篇 WebRTC学习一&#xff1a;获取音频和视频设备 第五篇 WebRTC学习二&#xff1a;WebRTC音视频数据采集 第六篇 WebRTC学习三…...

力扣47. 全排列 II

思路 用 used 保存在一次答案中取过的数组索引。 先对数组进行排序&#xff0c;然后尝试取每个元素作为排列。 首先需要满足不重复取自己&#xff0c;即 !used.contains(i)。其次当前元素和前一个元素不同时可取&#xff0c;即 i 0 || nums[i] ! nums[i - 1]&#xff1b; 如…...

什么是将应用放在边缘服务器上创建?应用不是在用户手机上吗?边缘计算究竟如何优化?通过两个问题来辨析

元宇宙应用虽然可以在用户的手机等终端设备上运行&#xff0c;但大部分的计算和数据处理任务并不是完全在手机上完成的。元宇宙的运行需要庞大的计算资源和大量的数据交互&#xff0c;而这些是手机等终端设备难以独自承担的。因此&#xff0c;元宇宙应用需要借助边缘数据中心等…...

jmeter高级使用场景

JMeter 是一款功能强大的性能测试工具,除了基础的使用方法外,还有许多高级使用技巧,可帮助你更精准、高效地完成复杂的测试任务。以下为你详细介绍一些 JMeter 的高级使用方法: 分布式测试 当需要模拟大量并发用户来对系统进行压力测试时,单台机器的性能可能无法满足要求…...

智能升级、安全加倍,遨游防爆对讲机拉起通信安防线

在充斥着爆炸性气体和易燃物质的危险作业环境中&#xff0c;通信设备的选择关乎生命安全。一旦通信设备引发电火花&#xff0c;其后果将不堪设想。因此&#xff0c;专为防范易燃易爆环境而设计的防爆对讲机&#xff0c;凭借其独特的防爆技术和设计&#xff0c;成为了这些高风险…...

Flutter 上的 Platform 和 UI 线程合并是怎么回事?它会带来什么?

Flutter 在 3.29 发布了一个「重大」调整&#xff1a;从 3.29 开始&#xff0c;Android 和 iOS 上的 Flutter 将在应用的主线程上执行 Dart 代码&#xff0c;并且不再有单独的 Dart UI 线程 也许一些人对于这个概念还比较陌生&#xff0c;有时间可以看看以前发过的 《深入理解…...

IDEA关闭SpringBoot程序后仍然占用端口的排查与解决

IDEA关闭SpringBoot程序后仍然占用端口的排查与解决 问题描述 在使用 IntelliJ IDEA 开发 Spring Boot 应用时&#xff0c;有时即使关闭了应用&#xff0c;程序仍然占用端口&#xff08;例如&#xff1a;4001 端口&#xff09;。这会导致重新启动应用时出现端口被占用的错误&a…...

进程状态(R|S|D|t|T|X|Z)、僵尸进程及孤儿进程

文章目录 一.进程状态进程排队状态&#xff1a;运行、阻塞、挂起 二.Linux下的进程状态R 运行状态&#xff08;running&#xff09;S 睡眠状态&#xff08;sleeping)D 磁盘休眠状态&#xff08;Disk sleep&#xff09;t 停止、暂停状态(tracing stopped)T 停止、暂停状态(stopp…...

Docker 搭建 Gitlab 服务器 (完整详细版)

参考 Docker 搭建 Gitlab 服务器 (完整详细版)_docker gitlab-CSDN博客 Docker 安装 (完整详细版)_docker安装-CSDN博客 Docker 日常命令大全(完整详细版)_docker命令-CSDN博客 1、Gitlab镜像 # 查找Gitlab镜像 docker search gitlab # 拉取Gitlab镜像 docker pull gitlab/g…...

Elasticsearch:使用经过训练的 ML 模型理解稀疏向量嵌入

作者&#xff1a;来自 Elastic Dai Sugimori 了解稀疏向量嵌入&#xff0c;理解它们的作用/含义&#xff0c;以及如何使用它们实现语义搜索。 Elasticsearch 提供语义搜索功能&#xff0c;允许用户使用自然语言进行查询并检索相关信息。为此&#xff0c;目标文档和查询必须首先…...

huggingface部署本地大模型DeepSeek-R1-Distill-Llama-70B使用streamlit构建交互式 Web 应用

文章目录 一、Streamlit介绍二、模型下载三 、模型部署四、效果展示 一、Streamlit介绍 Streamlit 是一个开源的 Python 库&#xff0c;专门用于快速构建和部署交互式 Web 应用程序&#xff0c;尤其适合数据科学和机器学习领域。以下是关于 Streamlit 的详细介绍&#xff1a; …...

中华人民共和国著作权法

目录 中华人民共和国著作权法 第一章 总则 第二章 著作权 第一节 著作权人及其权利 第二节 著作权归属 第三节 权利的保护期 第四节 权利的限制 第三章 著作权许可使用和转让合同 第四章 与著作权有关的权利 第一节 图书、报刊的出版 第二节 表  演 第…...