【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 是一种技术,允许系统跟踪数据库表中数据的更改,这些更改可以是插入、更新或删除操作。在大数据和实时数据处理场景…...
如何快速进行.NET Core安全审计:10个关键漏洞扫描技巧
如何快速进行.NET Core安全审计:10个关键漏洞扫描技巧 【免费下载链接】core dotnet/core: 是 .NET Core 的官方仓库,包括 .NET Core 运行时、库和工具。适合对 .NET Core、跨平台开发和想要使用 .NET Core 进行跨平台开发的开发者。 项目地址: https:…...
Pi0机器人控制中心RTOS集成:实时任务调度优化
Pi0机器人控制中心RTOS集成:实时任务调度优化 1. 引言 在机器人控制系统中,实时性往往决定着整个系统的可靠性和性能。Pi0机器人控制中心作为一个复杂的多任务系统,需要同时处理传感器数据采集、运动控制、决策规划等多个关键任务。在实时操…...
Kotaemon在教育培训中的应用:如何构建可信赖的学科答疑助手?
Kotaemon在教育培训中的应用:如何构建可信赖的学科答疑助手? 1. 教育场景中的AI答疑痛点 想象这样一个场景:晚自习教室里,一个学生正为生物作业发愁。他在手机上输入:"光合作用的暗反应发生在叶绿体的哪个部位&…...
告别Postman!用VSCode REST Client插件管理你的HTTP请求(附环境变量实战)
告别Postman!用VSCode REST Client插件管理你的HTTP请求(附环境变量实战) 在开发者的日常工作中,API调试是不可或缺的一环。传统上,Postman等独立工具占据了主导地位,但随着开发工具链的整合趋势࿰…...
零基础玩转TensorFlow-v2.15:Jupyter与SSH两种方式快速上手
零基础玩转TensorFlow-v2.15:Jupyter与SSH两种方式快速上手 深度学习正在改变我们解决问题的方式,而TensorFlow作为最受欢迎的深度学习框架之一,让开发者能够轻松构建和训练复杂的机器学习模型。但对于初学者来说,环境配置往往成…...
3小时搭建A股量化数据仓库:告别API延迟,开启本地金融数据新时代
3小时搭建A股量化数据仓库:告别API延迟,开启本地金融数据新时代 【免费下载链接】AShareData 自动化Tushare数据获取和MySQL储存 项目地址: https://gitcode.com/gh_mirrors/as/AShareData 还在为量化分析时频繁调用API而烦恼吗?每次策…...
macOS沙盒限制下运行OpenClaw:ollama-QwQ-32B权限解决方案
macOS沙盒限制下运行OpenClaw:ollama-QwQ-32B权限解决方案 1. 问题背景:当自动化遇上macOS沙盒 上周我尝试在macOS Ventura上部署OpenClaw对接本地ollama-QwQ-32B模型时,遭遇了典型的"权限墙"——明明所有服务都正常运行…...
工业通信系统安装:从网络架构到现场落地的完整技术指南
一、什么是工业通信系统安装?为什么它比普通弱电施工要求更高?工业通信系统安装,指的是围绕工业生产场景,对控制层、监控层、管理层之间的数据传输链路进行规划、布线、接线、组网、调试、联动和验收的全过程。它不是单纯的网络工…...
思源宋体TTF:开源中文字体的技术突破与商业价值重构
思源宋体TTF:开源中文字体的技术突破与商业价值重构 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 在数字化内容爆炸的今天,中文字体的选择直接影响信息传递的…...
claude code 使用
1,模型更换进入C盘目录 C:\Users\****\.claude 找到 settings.json这个是通义千问模型{"env": {"ANTHROPIC_AUTH_TOKEN": "sk-3db74945b4a****","ANTHROPIC_BASE_URL": "https://dashscope.aliyuncs.com/apps/anthro…...
