Spring面试篇章——Spring基本概述
Spring 的基本概述
Spring学习的核心内容—一图胜千言

- IOC:控制反转,可以管理 Java 对象
- AOP:切面编程
- JDBCTemplate:是Spring提供一套访问数据库的技术,应用性强,相对好理解
- 声明式事务:基于IOC / AOP实现事务管理
Spring的几个重要概念
1、Spring可以整合其他的框架(Spring是管理框架的框架)
2、Spring有两个核心的概念:IOC和AOP
3、IOC(Inversion Of Control 控制反转)
- 传统的开发模式(JdbcUtils / 反射)
程序 —> 环境(程序读取环境配置,然后自己创建对象)

1、程序员编写程序,在程序中读取到配置信息
2、创建对象,new Object() // 反射方式
3、使用对象完成任务
- IOC的开发模式
程序 <— 容器(容器创建好对象,程序直接使用)

1、Spring 根据配置文件XML / 注解来创建对象,并放入到容器(ConcurrentHashMap)中,并且可以完成对象之间的依赖
2、当需要使用某个对象实例的时候,就直接从容器中获取即可
3、程序员可以更加关心如果使用对象完成相应的业务(以前是new => 注解 / 配置方式)
4、DI—Dependency Injection 依赖注入(是实现IOC的一种方法)
5、Spring最大的价值,通过配置给程序提供需要使用的web层[ Servlet(Action / Controller) ]/Service/Dao/[ JavaBean/Entity ]对象
- 这个是核心价值所在,也是IOC的具体体现,实现解耦

Spring的快速入门
需求说明
- 通过 Spring 的方式(配置文件),获取 JavaBean:Monster的对象,并给该对象属性赋值,输出该对象信息

完成步骤
- 下载Spring的开发包:https://spring.io/projects/spring-framework#learn

代码实现
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xmlns:util="http://www.springframework.org/schema/util"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/utilhttps://www.springframework.org/schema/util/spring-util.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsd"><!--1. 配置monster对象2. 在beans中可以配置多个bean3. bean表示就是一个java对象4. class属性是用于指定类的全路径 -> Spring底层使用反射创建5. id属性表示该Java对象在Spring容器中的id,通过id可以获取到该对象6. <property name="monsterId" value="100"/> 用于给该对象的属性赋值--><bean class="com.zan.spring.bean.Monster" id="monster01"><!-- <bean class="com.zan.spring.bean.Monster">--><property name="monsterId" value="100"/><property name="name" value="牛魔王"/><property name="skill" value="芭蕉扇"/></bean></beans>
public class SpringBeanTest {@Testpublic void getMonster() {// 1. 创建容器 ApplicationContext// 2. 该容器和容器配置文件是相关联的 - 读取到的是out文件夹下的beans.xml文件ApplicationContext iocContext = new ClassPathXmlApplicationContext("beans.xml");// 3. 通过getBean获取对应的对象(传入ID)// 默认返回的是Object,但是运行类型是Monster
// Object monster01 = iocContext.getBean("monster01");Monster monster01 = (Monster) iocContext.getBean("monster01");// 4. 输出System.out.println("monster01=" + monster01 + " 运行类型=" + monster01.getClass());System.out.println("monster01=" + monster01 + " 获取对应的属性name=" + monster01.getName());// 5. 也可以在获取的时候,直接指定Class类型,可以再次获取Monster monster011 = iocContext.getBean("monster01", Monster.class);System.out.println("monster011=" + monster011);System.out.println("monster011.name=" + monster011.getName());// 6. 查看容器注入了哪些bean对象,获取所有的beanNameString[] beanDefinitionNames = iocContext.getBeanDefinitionNames();for (String beanDefinitionName : beanDefinitionNames) {System.out.println(beanDefinitionName);}System.out.println("ok~~~");}// 验证类加载路径@Testpublic void classPath() {File file = new File(this.getClass().getResource("/").getPath());// 看到类的加载路径System.out.println("file = " + file);// file = D:\Code\Java\Learn\Spring\spring-review\out\production\spring-review}
}
Debug查看Spring容器结构/机制







手动开发 - 简单的Spring基于XML配置的程序
需求说明
- 自己写一个简单的Spring容器, 通过读取beans.xml,获取第1个JavaBean:Monster的 对象,并给该的对象属性赋值,放入到容器中, 输出该对象信息


- 也就是不使用 Spring 的原生框架,我们自己简单模拟实现
需求分析

代码实现
1、导入 Dom4j.jar 包
2、编写ZanApplicationContext
public class ZanApplicationContext {private ConcurrentHashMap<String, Object> singletonObjects = new ConcurrentHashMap<>();// 构造器// 接受一个容器的配置文件,比如 beans.xmlpublic ZanApplicationContext(String iocBeanXmlPath) throws Exception {// 1. 得到类加载路径String path = this.getClass().getResource("/").getPath();// 2. 创建SAXReaderSAXReader saxReader = new SAXReader();// 3. 获取文档Document对象Document document = saxReader.read(new File(path + iocBeanXmlPath));// 4. 得到rootDocumentElement rootElement = document.getRootElement();// 5. 得到第一个bean对象 monster01Element bean = (Element) rootElement.elements("bean").get(0);// 6. 获取到第一个 bean-monster01 的相关属性String id = bean.attributeValue("id");String classFullPath = bean.attributeValue("class");List<Element> property = bean.elements("property");// 遍历
// for (Element element : property) {
// String value = element.attributeValue("value");
// System.out.println(value);
// }// 这里简便获取Integer monsterId = Integer.parseInt(property.get(0).attributeValue("value"));String name = property.get(1).attributeValue("value");String skill = property.get(2).attributeValue("value");// 7. 使用反射创建对象 ==> 回顾反射机制Class<?> aClass = Class.forName(classFullPath); // 获取对应的class对象// 这是的o对象就是一个Monster对象Monster o = (Monster) aClass.newInstance();// 给o对象赋值// 使用反射赋值
// Method[] declaredMethods = aClass.getDeclaredMethods();
// for (Method declaredMethod : declaredMethods) {
// Object invoke = declaredMethod.invoke(o);
//
// }o.setMonsterId(monsterId);o.setName(name);o.setSkill(skill);// 8. 将创建好的对象放入到singleObjects中singletonObjects.put(id, o);}public Object getBean(String id) {// 还可以严谨一下return singletonObjects.get(id);}
}
- Test类
public class ZanApplicationContextTest {public static void main(String[] args) throws Exception {ZanApplicationContext zanApplicationContext = new ZanApplicationContext("beans.xml");Monster monster01 = (Monster) zanApplicationContext.getBean("monster01");System.out.println(monster01);}
}

Spring原生容器底层结构

补充:可以不进行分配ID,系统会默认分配ID,分配ID的规则为全类名#1,全类名#1 …
相关文章:
Spring面试篇章——Spring基本概述
Spring 的基本概述 Spring学习的核心内容—一图胜千言 IOC:控制反转,可以管理 Java 对象AOP:切面编程JDBCTemplate:是Spring提供一套访问数据库的技术,应用性强,相对好理解声明式事务:基于IOC …...
股票预测模型中注意力多层Attention RNN LSTM 的应用
全文链接:https://tecdat.cn/?p37152 原文出处:拓端数据部落公众号 Attention 机制是一种在神经网络处理序列数据时极为关键的技术,它赋予了模型“聚焦”能力,能够自动评估输入序列中各部分的重要性。通过为序列中的每个元素分…...
C语言 | Leetcode C语言题解之第313题超级丑数
题目: 题解: int nthSuperUglyNumber(int n, int* primes, int primesSize) {long dp[n 1];int pointers[primesSize];for (int i 0; i < primesSize; i) {pointers[i] 0;}long nums[primesSize];for (int i 0; i < primesSize; i) {nums[i] …...
PHP健身微信小程序系统源码
🏋️♀️健身新潮流!解锁“健身微信小程序”的全方位塑形秘籍 📱开篇:掌中健身房,随时随地动起来 你还在为找不到合适的健身场地或教练而烦恼吗?是时候告别这些束缚,拥抱“健身微信小程序”…...
树组件 el-tree 数据回显
树组件 el-tree 数据回显 树型结构的数据回显问题: 这里我只放了核心代码,主要是如何获取选中的树节点的id集合和如何根据树节点的id集合回显数据 大家根据需要自行更改! <el-tree ref"authorityRef" node-key"id" …...
54、PHP 实现希尔排序
题目: PHP 实现希尔排序 描述: 思路分析:希尔排序是基于插入排序的,区别在于插入排序是相邻的一个个比较(类似于希尔中h1的情形),而希尔排序是距离h的比较和替换。 希尔排序中一个常数因子n&a…...
linux 虚拟机解压arm-linux-gcc-4.6.4-arm-x86_64.tar.bz2并arm-linux-gcc
解压到当前目录:tar -jxvf arm-linux-gcc-4.6.4-arm-x86_64.tar.bz2解压到指定目录:tar -jxvf arm-linux-gcc-4.6.4-arm-x86_64.tar.bz2 -C /xx/xxx/xxx-C大写,后面接要解压的路径解压后得到一个 opt文件夹 在/usr/local/bin 下创建新的…...
泛化的最近点迭代法(Generalized-ICP)
Generalized-ICP算法是由斯坦福大学的Aleksandr V. Segal、Dirk Haehnel和Sebastian Thrun提出的,于2009年在Robotics science and system会议上发表。 GICP是一种ICP算法的变体,其原理与ICP算法相同,之所以称为泛化的ICP算法是因为大多数ICP…...
Java | Leetcode Java题解之第313题超级丑数
题目: 题解: class Solution {public int nthSuperUglyNumber(int n, int[] primes) {int[] dp new int[n 1];int m primes.length;int[] pointers new int[m];int[] nums new int[m];Arrays.fill(nums, 1);for (int i 1; i < n; i) {int minN…...
单细胞数据整合-去除批次效应harmony和CCA (学习)
目录 单细胞批次效应学习 定义 理解 常用的去批次方法-基于Seurat 1) Seurat-integration(CCA) 2) Seurat-harmony 去批次代码 ①Seurat-integration(CCA) ②Seurat-harmony 单细胞批次效应学习 …...
MuRF代码阅读
对图像Size的处理, 以适应Transformer 在MVSPlat 当中使用 Center_Crop 裁剪图像,适用于 Transformer 的32 倍数, 其中 焦距 f 不变化,只改变 cx,cy.MuRF 直接对图像进行 插值,合成理想的 size. 根据 ori_size 和 inference_size…...
pycharm无法导入pyside2模块;“ModuleNotFoundError: No module named ‘PySide2“
参考博客: 1)pycharm中配置pyqt designer和pyside2【功能是在pycharm中可以打开designer,并且可以把.ui文件转换为.py文件】 https://blog.csdn.net/kuntliu/article/details/117219237 2).ui转化为.py后,点击运行,报错…...
c语言指针中“数组名的理解”以及“一维数组传参”的本质
数组名的理解 数组名就是数组首元素的地址。 例如:输入一个数组的所有元素,再打印出来。 另一种写法 以上可以看出:*arri) arr[i] 也即是:*(iarr)i[arr] 本质上无区别 1:数组就是数组,是一块…...
计算机毕业设计Python+Flask微博舆情分析 微博情感分析 微博爬虫 微博大数据 舆情监控系统 大数据毕业设计 NLP文本分类 机器学习 深度学习 AI
基于Python/flask的微博舆情数据分析可视化系统 python爬虫数据分析可视化项目 编程语言:python 涉及技术:flask mysql echarts SnowNlP情感分析 文本分析 系统设计的功能: ①用户注册登录 ②微博数据描述性统计、热词统计、舆情统计 ③微博数…...
KubeBlocks v0.9 解读|最高可管理 10K 实例的 InstanceSet 是什么?
实例(Instance)是 KubeBlocks 中的基本单元,它由一个 Pod 和若干其它辅助对象组成。为了容易理解,你可以先把它简化为一个 Pod,下文中将统一使用实例这个名字。 InstanceSet 是一个通用 Workload API,负责…...
ZW3D二次开发_菜单_禁用/启用表单按钮
1.如图示,ZW3D可以禁用表单按钮(按钮显示灰色) 2.禁用系统默认表单按钮,可以在菜单空白处右击,点击自定义,找到相关按钮的名称,如下图。 然后使用代码: char name[] "!FtAllBo…...
windows子系统wsl完成本地化设置locale,LC_ALL
在 Windows 的子系统 Linux(WSL)环境中,解决本地化设置问题可以采取以下步骤: 1. **检查本地化设置**: 打开你的 WSL 终端(比如 Ubuntu、Debian 等),运行以下命令来查看当前的本…...
MYSQL 根据条件order by 动态排序
文章目录 案例1:根据动态值的不同,决定某个字段是升序还是降序案例2:根据动态值的不同,决定使用哪个字段排序 最近在做大数据报表时,遇到这样一种情况,若是A类型,则部门按照正序排序;…...
DirectX修复工具下载安装指南:电脑dll修复拿下!6种dll缺失修复方法!
在日常使用电脑的过程中,不少用户可能会遇到“DLL文件缺失”的错误提示,这类问题往往导致程序无法正常运行或系统出现不稳定现象。幸运的是,DirectX修复工具作为一款功能强大的系统维护软件,能够有效解决大多数DLL文件缺失问题&am…...
vue3(1)虚拟数字键盘的封装,(2)以及子组件改变父组件变量的值进而使子组件实时响应值的变化,(3)子组件调用父组件中的方法(带参)
父组件 <template><div><!-- 数字键盘 --><NumericKeyboardv-model:myDialogFormVisible"myDialogFormVisible" :myValueRange"myValueRange"submit"numericKeyboardSubmitData"/></div> </template><s…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...
NPOI操作EXCEL文件 ——CAD C# 二次开发
缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...
