企业级信息系统开发学习1.1 初识Spring——采用Spring配置文件管理Bean
文章目录
- 一、Spring容器演示——采用Spring配置文件管理Bean
- (一)创建Maven项目
- (二)添加Spring依赖
- (三)创建杀龙任务类
- (四)创建勇敢骑士类
- (五)采用传统方式让勇敢骑士完成杀龙任务
- (六)采用Spring容器让勇敢骑士完成杀龙任务
- 1、创建日志属性文件
- 2、创建Spring配置文件
- 3、在Spring配置文件里创建Bean
- (1)创建杀龙任务Bean
- (2)创建勇敢骑士Bean
- 4、创建新勇敢骑士测试类
- 5、创建两个勇敢骑士Bean
- 6、修改新勇敢骑士测试类
一、Spring容器演示——采用Spring配置文件管理Bean
- Spring容器其实就是一个Bean工厂,在工厂里通过配置文件或配置类创建各种各样的Bean,然后在Spring应用程序就可以按照名称或类型获取工厂里已经配置好的Bean。下面我们就通过一个具体的案例来了解Spring容器是如何工作的。创建Spring应用程序 - 骑士完成任务。
(一)创建Maven项目
-
创建Maven项目 -
SpringDemo,设置项目位置以及组ID

-
单击【Finish】按钮,pom(project object model)对项目的版本、依赖与插件进行管理

-
修改项目的
Maven配置

(二)添加Spring依赖
- Spring框架与JDK版本对应关系
| Spring框架版本 | JDK版本 |
|---|---|
| 6.0.x | JDK 17-21(预期) |
| 5.3.x | JDK 8-19(预期) |
| 5.2.x | JDK8-15 |
| 5.1.x | JDK8-12 |
| 5.0.x | JDK8-10 |
| 4.3.x | JDK6-8 |
本博开发环境:JDK11,IntelliJ IDEA 2020(最多支持JDK14),因此只好使用Spring5.3.x版本
如果IntelliJ IDEA 2021就可以支持JDK17,因此就可以使用Spring6.0.x版本
- 在Maven仓库里查找Spring框架(https://mvnrepository.com)

- 查看
Spring Core

-
选择最新版本 -
5.3.25

-
添加到
pom.xml文件的<dependencies>元素里(如果没有下载到本地,5.3.25将会显示红色)

-
同理添加其他依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>net.huawei.spring</groupId><artifactId>SpringDemo</artifactId><version>1.0-SNAPSHOT</version><dependencies><!--Spring核心--><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.3.25</version></dependency><!--Spring实体--><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>5.3.25</version></dependency><!--Spring容器--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.25</version></dependency><!--Spring Web--><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>5.3.25</version></dependency><!--Spring MVC--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.25</version></dependency><!--Spring测试--><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.3.25</version></dependency><!--单元测试--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency></dependencies>
</project>
- 打开Maven窗口,单击刷新按钮,就开始下载依赖包,等待插件与依赖下载完成

- 可以查看本地Maven仓库里当前项目下载的有关Spring框架的依赖

(三)创建杀龙任务类
- 创建
net.[name].spring.day01包,然后在包里面创建SlayDragonQuest类

package net.huawei.spring.day01;/*** 功能:杀龙任务类*/
public class SlayDragonQuest {public void embark() {System.out.println("执行杀龙任务……");}
}
(四)创建勇敢骑士类
- 在
net.huawei.spring.day01包里创建BraveKnight类

package net.huawei.spring.day01;/*** 功能:勇敢骑士类*/
public class BraveKnight {private String name; // 骑士姓名private SlayDragonQuest slayDragonQuest; // 杀龙任务public String getName() {return name;}public void setName(String name) {this.name = name;}/*** 设置杀龙任务** @param slayDragonQuest*/public void setSlayDragonQuest(SlayDragonQuest slayDragonQuest) {this.slayDragonQuest = slayDragonQuest;}/*** 勇敢骑士执行任务*/public void embarkOnQuest() {System.out.print("勇敢骑士[" + name + "]"); // 骑士留名slayDragonQuest.embark(); // 执行杀龙任务}
}
- 回顾一下传统方式怎么使用这两个类。需要我们自己通过new实例化两个类,然后设置勇敢骑士对象的姓名和杀龙任务属性,然后调用勇敢骑士执行任务的方法。
(五)采用传统方式让勇敢骑士完成杀龙任务
- 在
test/java里创建net.huawei.spring.day01包,然后在包里面创建TestBraveKnightOld类

package net.huawei.spring.day01;import org.junit.Test;/*** 功能:采用传统方式测试勇敢骑士类*/
public class TestBraveKnightOld {@Testpublic void testBraveKnight() {// 创建杀龙任务对象SlayDragonQuest slayDragonQuest = new SlayDragonQuest();// 创建勇敢骑士对象BraveKnight braveKnight = new BraveKnight();// 设置勇敢骑士属性braveKnight.setName("罗宾汉");braveKnight.setSlayDragonQuest(slayDragonQuest);// 调用勇敢骑士执行任务方法braveKnight.embarkOnQuest();}
}
-
运行测试方法
testBraveKnight() -
查看程序运行结果

-
出现这个问题要设置Java版本



-
三个地方的设置要保持一致,然后再运行程序,查看结果

(六)采用Spring容器让勇敢骑士完成杀龙任务
1、创建日志属性文件
- 在
resources目录里创建log4j.properties

log4j.rootLogger=WARN, stdout, logfile
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/spring.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
2、创建Spring配置文件
- 在
resources里创建xmlconfig目录,然后在里面创建spring-config.xml

- 输入Spring配置文件名



- 单击【Configure application context】(配置应用上下文)

- 单击【Create new application context…】(创建新的应用上下文),注意应用上下文名称是可以修改的

- 单击【OK】按钮

- 在项目结构窗口里查看配置好的spring-config.xml

3、在Spring配置文件里创建Bean
(1)创建杀龙任务Bean
<!--配置杀龙任务Bean-->
<bean id="slayDragonQuest" class="net.huawei.spring.day01.SlayDragonQuest"/>
- id属性 :对应对象名,可以任取,然后在应用程序里我们可以通过这个
id值从Spring容器中获取Bean对象。 - class属性 :表明Bean对象是基于哪个类来实例化,注意一定要包含包名。
(2)创建勇敢骑士Bean
<!--配置勇敢骑士Bean-->
<bean id="braveKnight" class="net.huawei.spring.day01.BraveKnight"> <property name="name" value="罗宾汉"/> <!-- RobinHood.setName("罗宾汉")--> <property name="slayDragonQuest" ref="slayDragonQuest"/> <!--RobinHood.setSlayDragonQuest(slayDragonQuest)-->
</bean>
- property元素:给对象设置属性值
- name属性:Bean对象的属性名
- ref属性:Bean对象的属性值(
引用另一个Bean对象)
勇敢骑士Bean通过<property>元素将杀龙任务Bean注入作为其属性。注意,name属性值一定是BraveKnight类的属性名,ref属性值是已定义的杀龙任务Bean的id值。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><!--配置杀龙任务Bean--><bean id="slayDragonQuest" class="net.huawei.spring.day01.SlayDragonQuest"/><!--配置勇敢骑士Bean--><bean id="braveKnight" class="net.huawei.spring.day01.BraveKnight"><property name="name" value="罗宾汉"/> <!--braveKnight.setName("罗宾汉");--><property name="slayDragonQuest" ref="slayDragonQuest"/> <!--braveKnight.setSlayDragonQuest(slayDragonQuest);--></bean>
</beans>
- 通过Spring配置文件,创建了两个Bean对象,它们之间存在依赖关系,第一个Bean对象是第二个Bean对象的任务属性值。

4、创建新勇敢骑士测试类
-
在
test/java/net.huawei.spring.day01里创建TestBraveKnightNew测试类

-
采用基于类路径的应用容器类 -
ClassPathXmlApplicationContext


package net.huawei.spring.day01;import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** 功能:采用Spring容器测试勇敢骑士类* 作者:华卫* 日期:2023年02月14日*/
public class TestBraveKnightNew {private ClassPathXmlApplicationContext context; // 基于类路径XML配置文件的应用容器(Bean工厂)@Before // 每次测试方法执行前都要执行的代码就放在此方法里public void init() {// 基于Spring配置文件创建应用容器context = new ClassPathXmlApplicationContext("xmlconfig/spring-config.xml");// 提示用户System.out.println("Spring应用容器已创建~");}@Testpublic void testBraveKnight() {// 根据名称从应用容器中获取勇敢骑士对象BraveKnight braveKnight = (BraveKnight) context.getBean("braveKnight");// 勇敢骑士执行任务braveKnight.embarkOnQuest();}@After // 每次测试方法执行后都要执行的代码就放在此方法里public void destroy() {// 关闭应用容器context.close();// 提示用户System.out.println("Spring应用容器已关闭~");}
}
-
代码说明:首先通过Spring配置文件创建Spring应用容器,然后就可以利用容器的getBean方法通过名称获取容器里的Bean对象,然后调用该对象的方法。
-
运行测试方法testBraveKnight(),查看结果
-
再次运行程序,查看结果

- 根据名称从应用容器中获取勇敢骑士对象可能会报错,因为配置文件里没有定义那个名称的Bean

5、创建两个勇敢骑士Bean
-
基于一个类可以创建多个对象,因此,在
spring-config.xml文件里,也可以基于同一个类创建多个Bean。 -
基于
BraveKnight类再创建两个Bean,id值分别为knight1和knight2。

- 在Spring配置文件里,同一个Bean不能重复定义,也就是说不允许两个Bean有相同的id值
6、修改新勇敢骑士测试类
-
获取新建的两个勇敢骑士Bean,调用执行任务方法

-
执行
testBraveKnight()测试方法,查看结果

-
勇敢骑士Bean采用
属性注入方式将杀龙任务Bean注入作为其属性。

-
初始化对象其实可以调用有参构造方法来设置属性的初始值,对应到Spring的Bean工厂,就还有一种注入方式,叫做
构造方法注入。同样地,我们还是通过案例来演示如何通过构造方法来注入属性值。
相关文章:
企业级信息系统开发学习1.1 初识Spring——采用Spring配置文件管理Bean
文章目录一、Spring容器演示——采用Spring配置文件管理Bean(一)创建Maven项目(二)添加Spring依赖(三)创建杀龙任务类(四)创建勇敢骑士类(五)采用传统方式让勇…...
CSS盒子模型
盒子模型 CSS三大特性 继承性、层叠性、优先级 优先级比较 继承 < 通配符选择器 < 标签选择器 < 类选择器 < id选择器 < 行内样式 < !important 注意:!important不能提升继承的优先级,只要是继承优先级最低 复合选择器权重叠加计…...
Python基础学习笔记 —— 数据结构与算法
数据结构与算法1 数据结构基础1.1 数组1.2 链表1.3 队列1.4 栈1.5 二叉树2 排序算法2.1 冒泡排序2.2 快速排序2.3 (简单)选择排序2.4 堆排序2.5 (直接)插入排序3 查找3.1 二分查找1 数据结构基础 本章所需相关基础知识:…...
笔记本连接wifi,浏览器访问页面,显示访问被拒绝
打开chrome、edge浏览器访问第1个第2个页面正常,后面再打开页面显示异常。 但手机连接正常,笔记本连接异常,起初完全没有怀疑是wifi问题 以为用了vpn软件问题,认为中了病毒。杀毒,并没有中毒。 1、关闭vpn代理&#…...
36个物联网专业毕业论文选题推荐
物联网技术在智能家居系统中的应用研究物联网在智慧城市建设中的作用物联网在工业4.0中的实现与发展 物联网与智能物流系统的结合物联网与医疗健康领域的融合研究物联网与环境监测系统的集成物联网与农业生产的结合研究物联网技术对汽车行业的影响与发展物联网在智能安防领域的…...
Pytorch复习笔记--torch.nn.functional.interpolate()和cv2.resize()的使用与比较
1--前言 博主在处理图片尺度问题时,习惯使用 cv2.resize() 函数;但当图片数据需用显卡加速运算时,数据需要在 GPU 和 CPU 之间不断迁移,导致程序运行效率降低; Pytorch 提供了一个类似于 cv2.resize() 的采样函数&…...
ASP.NET Core MVC 项目 AOP之ActionFilterAttribute
目录 一:说明 二:实现ActionFilterAttribute父类 一:说明 ActionFilterAttribute比前两者简单方便,易于扩展,不易产生代码冗余。 ActionFilterAttribute过滤器执行顺序: 1:执行控制器中的构造函数,实例化控制器 2:执行ActionFilterAttribute.OnActionExecutionA…...
浅析EasyCVR安防视频能力在智慧小区建设场景中的应用及意义
一、行业需求 城市的发展创造了大量工作机会,人口的聚集也推动了居民住宅建设率的增长。人民生活旨在安居乐业,能否住得“踏实”是很多劳动工作者最关心的问题。但目前随着住宅小区规模的不断扩大、人口逐渐密集,在保证居住环境舒适整洁的同…...
Python的深、浅拷贝到底是怎么回事?一篇解决问题
嗨害大家好鸭!我是小熊猫~ 一、赋值 Python中, 对象的赋值都是进行对象引用(内存地址)传递, 赋值(), 就是创建了对象的一个新的引用, 修改其中任意一个变量都会影响到另一个 will …...
TCP协议十大特性
日升时奋斗,日落时自省 目录 1、确认应答 1.1、序号编辑 2、超时重传 3、连接管理 3.1、三次握手 3.2、四次挥手 4、滑动窗口 5、流量控制 6、拥塞控制 7、延时应答 8、捎带应答 9、面向字节流 10、异常情况 TCP协议: 特点:有…...
2.14作业【GPIIO控制LED】
设备树 myleds{ myled1 <&gpioe 10 0>; myled2 <&gpiof 10 0>; myled3 <&gpioe 8 0>; }; 驱动代码 #include<linux/init.h> #include<linux/module.h> #include<linux/of.h&…...
5min搞定linux环境Jenkins的安装
5min搞定linux环境Jenkins的安装 安装Jenkinsstep1: 使用wget 命令下载Jenkinsstep2、创建Jenkins日志目录并运行jekinsstep3、访问jenkins并解锁jenkins,安装插件以及创建管理员用户step4、到此,就完成了Finish、以上步骤中遇到的问题1、 jenkins启动不了2、jenkins无法访问…...
Cortex-M0存储器系统
目录1.概述2.存储器映射3.程序存储器、Boot Loader和存储器重映射4.数据存储器5.支持小端和大端数据类型数据对齐访问非法地址多寄存器加载和存储指令的使用6.存储器属性1.概述 Cortex-M0处理器具有32位系统总线接口,以及32位地址线(4GB的地址空间&…...
软件测试——测试用例之场景法
一、场景法的应用场合 场景法主要用于测试软件的业务流程和业务逻辑。场景法是基于软件业务的测试方法。在场景法中测试人员把自己当成最终用户,尽可能真实的模拟用户在使用此软件的操作情景: 重点模拟两类操作: 1)模拟用户正确…...
英文写作中的常用的衔接词
1. 增补 (Addition) in addition, furthermore, again, also, besides, moreover, whats more, similarly, next, finally 2.比较(Comparision) in the same way, similarly, equally, in comparison, just as 3. 对照 (Contrast) in contrast, on …...
新库上线 | CnOpenData中国地方政府债券信息数据
中国地方政府债券信息数据 一、数据简介 地方政府债券 指某一国家中有财政收入的地方政府地方公共机构发行的债券。地方政府债券一般用于交通、通讯、住宅、教育、医院和污水处理系统等地方性公共设施的建设。地方政府债券一般也是以当地政府的税收能力作为还本付息的担保。地…...
Python 条件语句
Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块。 可以通过下图来简单了解条件语句的执行过程: Python程序语言指定任何非0和非空(null)值为true,0 或者 null为false。 Python 编…...
C语言思维导图大总结 可用于期末考试 C语言期末考试题库
目录 一.C语言思维导图 二.C语言期末考试题库 一.C语言思维导图 导出的图可能有点糊,或者查看链接:https://share.weiyun.com/uhf1y2mp 其实原图是彩色的不知道为什么导出时颜色就没了 部分原图: 也可私信我要全图哦。 图里的链接可能点不…...
从零实现深度学习框架——再探多层双向RNN的实现
来源:投稿 作者:175 编辑:学姐 往期内容: 从零实现深度学习框架1:RNN从理论到实战(理论篇) 从零实现深度学习框架2:RNN从理论到实战(实战篇) 从零实现深度…...
Flink 连接流详解
连接流 1 Union 最简单的合流操作,就是直接将多条流合在一起,叫作流的“联合”(union)。联合操作要求必须流中的数据类型必须相同,合并之后的新流会包括所有流中的元素,数据类型不变。这种合流方式非常简…...
订单日记×禧巢汇家居:共同打造行业数字化标杆
一、客户背景 禧巢汇(上海)家居科技有限公司,成立于2025年,位于中国(上海)自由贸易试验区,是一家以从事销售家具为主的企业。 在业务不断壮大的过程中,面临订单处理效率低、统计数据麻烦等问题,需要一种既能提升运营效…...
从‘大胖老师’到‘小学霸’:用动态蒸馏拯救被剪枝‘剪残’的小模型
从‘大胖老师’到‘小学霸’:动态蒸馏如何拯救剪枝后的模型性能 想象一下,你有一位知识渊博的"大胖老师"——一个经过精心训练的大型神经网络模型。为了让它更轻便、更高效,你决定给它"减肥"(结构化剪枝&…...
2026 最强 AI 毕业论文工具盘点:9 款神器帮你告别论文熬夜焦虑
一、引言:毕业季论文困局,AI 工具成破局关键 又到了高校毕业季,屏幕前的你是否正对着空白文档发愁? 开题报告反复修改,导师一句 “方向不明确” 就让你前功尽弃文献综述堆了几十页,却理不清逻辑脉络&…...
Zotero文献管理效率革命:Ethereal Style插件深度应用指南
Zotero文献管理效率革命:Ethereal Style插件深度应用指南 【免费下载链接】zotero-style zotero-style - 一个 Zotero 插件,提供了一系列功能来增强 Zotero 的用户体验,如阅读进度可视化和标签管理,适合研究人员和学者。 项目地…...
Qwen3-0.6B-FP8部署详解:如何用16GB显存跑通FP8量化版Qwen3轻量推理
Qwen3-0.6B-FP8部署详解:如何用16GB显存跑通FP8量化版Qwen3轻量推理 想体验最新的大语言模型,但被动辄几十GB的显存需求劝退?今天,我们来解决这个痛点。 Qwen3系列模型以其强大的推理和对话能力备受关注,但其标准版本…...
星穹铁道自动化解决方案:用March7thAssistant释放游戏时间价值
星穹铁道自动化解决方案:用March7thAssistant释放游戏时间价值 【免费下载链接】March7thAssistant 🎉 崩坏:星穹铁道全自动 Honkai Star Rail 🎉 项目地址: https://gitcode.com/gh_mirrors/ma/March7thAssistant 副标题&…...
利用ADS实现多频段阻抗自动优化的实战指南
1. 从零开始理解多频段阻抗匹配 刚入行那会儿,我对阻抗匹配的理解还停留在"把50欧姆搞对就行"的层面。直到某次调试一个同时工作在900MHz和2.4GHz的双频天线时,才发现单频段匹配的思路完全不够用——调好了低频段,高频段性能就崩了…...
数据工程合规检查自动化:构建完整解决方案的10个关键步骤
数据工程合规检查自动化:构建完整解决方案的10个关键步骤 【免费下载链接】data-engineer-handbook Data Engineer Handbook 是一个收集数据工程师学习资料的项目。 - 提供数据工程师所需的知识、工具和资源,帮助数据工程师学习和成长。 - 特点ÿ…...
次元画室快速部署教程:手把手解决网络权限与配置问题
次元画室快速部署教程:手把手解决网络权限与配置问题 1. 环境准备与快速部署 1.1 系统要求检查 在开始部署次元画室前,请确保您的系统满足以下最低要求: 操作系统:Ubuntu 20.04/22.04 LTS 或 CentOS 8/9(推荐使用Ub…...
3大创新突破让千元机械臂媲美工业级性能:Faze4开源六轴机器人DIY全指南
3大创新突破让千元机械臂媲美工业级性能:Faze4开源六轴机器人DIY全指南 【免费下载链接】Faze4-Robotic-arm All files for 6 axis robot arm with cycloidal gearboxes . 项目地址: https://gitcode.com/gh_mirrors/fa/Faze4-Robotic-arm 价值定位ÿ…...
