【Spring Framework】使用XML配置文件配置Bean的实例化方式
在 Spring Framework 中,实例化 bean 的方式非常灵活,允许开发人员根据需求选择不同的方法。以下是几种常见的实例化 bean 的方式及其示例:
1. 通过无参构造函数实例化
这是最常见的方式,Spring 会使用 bean 的默认无参构造函数来创建实例。
示例:
<!-- applicationContext.xml -->
<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="user" class="com.example.User"/>
</beans>
 
User.java:
package com.example;public class User {// 默认无参构造函数
}
 
2. 通过有参构造函数实例化
可以通过有参构造函数传递参数来实例化 bean,这在需要注入不可变的依赖时非常有用。
示例:
<!-- applicationContext.xml -->
<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="user" class="com.example.User"><constructor-arg value="John Doe"/><constructor-arg value="john.doe@example.com"/></bean>
</beans>
 
User.java:
package com.example;public class User {private String name;private String email;// 有参构造函数public User(String name, String email) {this.name = name;this.email = email;}// Getter 和 Setter 方法
}
 
3. 通过静态工厂方法实例化
可以使用静态工厂方法创建 bean,这对于复杂的实例化逻辑或需要特定配置的 bean 很有用。
示例:
<!-- applicationContext.xml -->
<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="user" class="com.example.UserFactory" factory-method="createUser"/>
</beans>
 
UserFactory.java:
package com.example;public class UserFactory {public static User createUser() {return new User("Jane Doe", "jane.doe@example.com");}
}
 
4. 通过实例工厂方法实例化
与静态工厂方法不同,实例工厂方法需要先创建工厂类的实例,然后通过这个实例调用工厂方法来创建 bean。
示例:
<!-- applicationContext.xml -->
<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="userFactory" class="com.example.UserFactory"/><!-- 使用实例工厂方法实例化 Bean --><bean id="user" class="com.example.User" factory-bean="userFactory" factory-method="createUser"/>
</beans>
 
UserFactory.java:
package com.example;public class UserFactory {public User createUser() {return new User("Alice Smith", "alice.smith@example.com");}
}
 
5. 通过自定义构造函数参数
可以使用构造函数注入复杂的类型和多个参数,并在 XML 配置中指定。
示例:
<!-- applicationContext.xml -->
<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="user" class="com.example.User"><constructor-arg value="John Doe"/><constructor-arg><bean class="com.example.Address"><property name="street" value="123 Main St"/><property name="city" value="Springfield"/></bean></constructor-arg></bean>
</beans>
 
User.java:
package com.example;public class User {private String name;private Address address;// 有参构造函数public User(String name, Address address) {this.name = name;this.address = address;}// Getter 和 Setter 方法
}
 
Address.java:
package com.example;public class Address {private String street;private String city;// Getter 和 Setter 方法
}
 
6. 使用 @Bean 注解
 
虽然不是 XML 配置的一部分,但值得一提的是,Java 配置类中的 @Bean 注解也可以用于实例化 bean。此方法在 Java 配置中非常常见,但它与 XML 配置兼容。
示例:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class AppConfig {@Beanpublic User user() {return new User("Emily Davis", "emily.davis@example.com");}
}
 
总结
在 Spring Framework 中,实例化 bean 的方式有很多种,包括:
- 无参构造函数: 最简单的方法,适用于基本的 bean 实例化。
 - 有参构造函数: 适合需要依赖注入的 bean。
 - 静态工厂方法: 用于复杂的实例化逻辑。
 - 实例工厂方法: 通过实例化工厂类来创建 bean。
 - 自定义构造函数参数: 支持复杂的 bean 配置。
 @Bean注解: 在 Java 配置类中使用,用于创建 bean 实例。
选择合适的实例化方式可以帮助更好地管理 bean 的生命周期和依赖关系。
相关文章:
【Spring Framework】使用XML配置文件配置Bean的实例化方式
在 Spring Framework 中,实例化 bean 的方式非常灵活,允许开发人员根据需求选择不同的方法。以下是几种常见的实例化 bean 的方式及其示例: 1. 通过无参构造函数实例化 这是最常见的方式,Spring 会使用 bean 的默认无参构造函数…...
模拟电子技术-实验四 二极管电路仿真
实验四 二极管电路仿真 一.实验类型 验证性实验 二.实验目的 1、验证二极管的单向导电性 2、验证二极管的稳压特性。 三.实验原理 二极管的单向导电性: 四、实验内容 1、二极管参数测试仿真实验 1)仪表仿真…...
Git 子仓(Git Submodule)学习
Git 子仓学习 Git 子仓(Submodule)是 Git 提供的一种功能,用于在一个 Git 仓库(称为主仓库或 superproject)中嵌入另一个 Git 仓库(称为子仓或 submodule)。这种功能在管理大型项目或依赖关系较…...
JavaSE基础 (认识String类)
一,什么是String类 在C语言中已经涉及到字符串了,但是在C语言中要表示字符串只能使用字符数组或者字符指针,可以使用标准库提 供的字符串系列函数完成大部分操作,但是这种将数据和操作数据方法分离开的方式不符合面相对象的思想&…...
学习大数据DAY25 Shell脚本的书写2与Shell工具的使用
目录 自定义函数 递归-自己调用自己 上机练习 12 Shell 工具 sort sed awk 上机练习 13 自定义函数 name(){ action; } function name { Action; } name 因为 shell 脚本是从上到下逐行运行,不会像其它语言一样先编译,所以函数必 须在调…...
Java学习Day19:基础篇9
包 final 权限修饰符 空着不写是default! 代码块 1.静态代码块 1.静态代码块优于空参构造方法 2.静态调用只被加载一次; 静态代码块在Java中是一个重要的特性,它主要用于类的初始化操作,并且随着类的加载而执行,且只…...
如何撤销git add ,git commit 的提交记录
一、撤销git commit ,但是没有push到远程的记录 git reset --hard HEAD~1 销最近的一次提交,并且丢弃所有未提交的更改 二、撤销git add ,但是没有提交到本地仓库的记录 git reset 三、原理 Git 工作流程的简要说明: 工作目录(Working …...
Postman环境变量的高级应用:复杂条件逻辑的实现
Postman环境变量的高级应用:复杂条件逻辑的实现 在Postman中,环境变量是管理和定制API请求的强大工具。通过使用环境变量,可以轻松地在不同环境之间切换,如开发、测试和生产环境。然而,环境变量的真正威力在于它们能够…...
AI问答-供应链管理:理解医疗耗材供应链SPD板块
医疗耗材供应链SPD板块是一个专注于医用耗材供应链管理的关键领域,它融合了供应链管理理论、物流信息技术以及环节专业化管理手段,旨在保证院内医用耗材的质量安全、满足临床需求,并提升医院的整体运营效率。以下是对医疗耗材供应链SPD板块的…...
科普文:分布式数据一致性协议Paxos
1 什么是Paxos Paxos协议其实说的就是Paxos算法, Paxos算法是基于消息传递且具有高度容错特性的一致性算 法,是目前公认的解决分布式一致性问题最有效的算法之一。 Paxos由 莱斯利兰伯特(Leslie Lamport)于1998年在《The Part-Time Parliament》论文中首次公 开&…...
Vue3 + js-echarts 实现前端大屏可视化
1、前言 此文章作为本人大屏可视化项目的入门学习笔记,以此作为记录,记录一下我的大屏适配解决方案,本项目是基于vite Vue3 js less 实现的,首先看ui,ui是网上随便找的,代码是自己实现的,后面…...
知乎信息流广告怎么投?一文读懂知乎广告开户及投放!
作为中国领先的问答社区,知乎以其高质量的内容和活跃的用户群体成为了众多品牌青睐的营销阵地。为了帮助企业更高效地利用知乎平台进行品牌推广,云衔科技提供了全方位的知乎广告开户及代运营服务,助力您的品牌在知乎上实现快速增长。 一、知…...
TikTok达人合作:AI与大数据如何提升跨境电商营销效果
在当今数字时代,跨境电商与TikTok达人的合作已成为推动品牌增长和市场拓展的重要力量。随着AI、大数据等先进技术的不断发展和应用,这种合作模式正变得更加高效和精准。本文Nox聚星将和大家探讨在TikTok达人合作中,AI、大数据等技术的具体运用…...
win11管理员账户为啥不能改?win11怎么更改管理员账户名称?
文章目录 亲测有效!!!!...
Spring Security学习笔记(三)Spring Security+JWT认证授权流程代码实例
前言:本系列博客基于Spring Boot 2.6.x依赖的Spring Security5.6.x版本 上两篇文章介绍了Spring Security的整体架构以及认证和鉴权模块原理。本篇文章就是基于Spring Security和JWT的一个demo 一、JWT简介 JWT(JSON Web Token),…...
精装房、旧房改造智能家居,单火线也有“救”了单火模块 零线发生器
精装房、旧房改造智能家居,单火线也有“救”了单火模块 零线发生器 史新华 以前写过关于智能家居没有预留零线,导致无法安装零火开关,也没办法装触控屏,主要原因还是无法通过零火线给设备供电。今年最火的一款思万奇零线发生器救…...
使用URLSearchParams获取url地址后面的参数(window.location.href)
function getUrlParams(url) {const urlStr url.split(?)[1];const urlSearchParams new URLSearchParams(urlStr);return Object.fromEntries(urlSearchParams.entries()); }const info getUrlParams(window.location.href); // info是一个对象,包含url携带参数…...
计算机网络03
文章目录 重传机制超时重传快速重传SACK 方法Duplicate SACK 滑动窗口流量控制操作系统缓冲区与滑动窗口的关系窗口关闭糊涂窗口综合症 拥塞控制慢启动拥塞避免算法拥塞发生快速恢复 如何理解是 TCP 面向字节流协议?如何理解字节流?如何解决粘包…...
linux每个目录都是干啥的???linux目录说明
很全,没事看看,记住 / 虚拟目录的根目录。通常不会在这里存储文件 /bin 二进制目录,存放许多用户级的GNU工具启动目录,存放启动文件 /etc 系统配置目录 /dev 设备目录,Linux在这里创建设备节点系统配置文件目录 /home 主目录,Linux在…...
DB2-Db2StreamingChangeEventSource
提示:Db2StreamingChangeEventSource 类主要用于从 IBM Db2 数据库中读取变更数据捕获 (CDC, Change Data Capture) 信息。CDC 是一种技术,允许系统跟踪数据库表中数据的更改,这些更改可以是插入、更新或删除操作。在大数据和实时数据处理场景…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...
倒装芯片凸点成型工艺
UBM(Under Bump Metallization)与Bump(焊球)形成工艺流程。我们可以将整张流程图分为三大阶段来理解: 🔧 一、UBM(Under Bump Metallization)工艺流程(黄色区域ÿ…...
