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

Spring中的Bean相关理解

在Spring框架中,Bean是一个由Spring IoC容器实例化、配置和管理的对象。Bean是一个被Spring框架管理并且被应用程序各个部分所使用的对象。Spring IoC容器负责Bean的创建、初始化、依赖注入以及销毁等生命周期管理。

 注:喜欢的朋友可以关注公众号“JAVA学习课堂”系统学习相关技术,持续更新。

目录

1、Bean的配置

2.Bean的实例化


1、Bean的配置

Spring类似一个工厂,它的作用就是生产和管理容器中的Bean,Spring容器支持XML和Properties两种格式的配置文件,实际开发中通常使用XML的格式,来注册并管理Bean之间的依赖关系。

   <Bean>元素的常用属性和子元素

注:

在配置文件中,一个普通的bean只需要定义id或者name和class两个属性。


<beans xmlns="http://www.springframework.org/schema/beans"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans.xsd">  <bean id="myBean" class="com.example.MyBeanClass">  <!-- 注入其他Bean、设置属性值等 -->  <property name="someProperty" value="someValue"/>  </bean>  <!-- 使用id属性定义bean1,对应的实现类为com.itTest.Bean1 -->  <bean id="bean1" class="com.itTest.Bean1" /><!-- 使用name属性定义bean2,对应的实现类为com.itTest.Bean2 -->  <bean name="bean2" class="com.itTest.Bean21" />
</beans>

 

2.Bean的实例化

在程序中,要使用某个对象,就需要先实例化对象,在spring中,要使用容器中的bean,同样需要实例化bean。

实例化bean的三种方式:构造器实例化、静态工厂方式实例化、实例工厂方式。

构造器实例化:


public class Bean1 {
}

创建spring配置文件beans1.xml配置文件中定义id为bean1的bean 

 

 


<beans xmlns="http://www.springframework.org/schema/beans"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans.xsd"
>  <!-- 使用id属性定义bean1,对应的实现类为com.itTest.Bean1 -->  <bean id="bean1" class="com.itTest.Bean1" />
</beans>

创建测试类: 


public class InstanceTest1 {public static void main(string [] args) {//定义配置w摁键路径string  xmlPath = "xml的路径";ApplicationContext applicationContext = new ClassPathXMlApplicationContext(xmlPath);Bean1 bean = (Bean) applicationContext.getBean("bean1");system.out.println(bean);}
}

静态工厂方式实例化:该方法要求开发者创建一个静态工厂的方式来创建bean实例,在配置中class属性指定的不在是bean实例的实现类,而是静态工厂类。

创建一个bean2类:

 


public class Bean2 {
}

 创建MyBean2Factory类,在该类中创建一个静态方法来返回bean2的实例:

 


public class MyBean2Factory {  //使用自己的工厂创建Bean2实例public static Bean2 createBean(){return new Bean2();}
}

 

创建spring配置文件 


<?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/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd"><bean id="bean2" class="com.instance.static_factory.MyBean2Factory" factory-method="createBean" />
</beans>

创建测试类:


public class InstanceTest2 {public static void main(String[] args) {// 定义配置文件路径String xmlPath = "com/instance/static_factory/beans2.xml";// ApplicationContext在加载配置文件时,对Bean进行实例化ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);System.out.println(applicationContext.getBean("bean2"));}
}

 

 

实例工厂方式实例化:该方法采用直接创建bean实例的方式,在配置文件中需要实例化的bean也不是通过class属性直接指向的实例化类,在通过factory-bean属性指向配置的实例工厂,使用factory-mentod属性确定使用工厂中的哪个方法

创建类对象:


public class MyBean3Factory {public MyBean3Factory() {System.out.println("bean3工厂实例化中");}//创建Bean3实例的方法public Bean3 createBean(){return new Bean3();}
}

创建Spring配置文件bean3.xml设置相关配置


<?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/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd"><!-- 配置工厂 --><bean id="myBean3Factory" class="com.instance.factory.MyBean3Factory" /><!-- 使用factory-bean属性指向配置的实例工厂,使用factory-method属性确定使用工厂中的哪个方法--><bean id="bean3" factory-bean="myBean3Factory" factory-method="createBean" />
</beans>

 创建测试类:


public class InstanceTest3 {public static void main(String[] args) {// 指定配置文件路径String xmlPath = "com/instance/factory/beans3.xml";// ApplicationContext在加载配置文件时,对Bean进行实例化ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);System.out.println(applicationContext.getBean("bean3"));}
}

 

相关文章:

Spring中的Bean相关理解

在Spring框架中&#xff0c;Bean是一个由Spring IoC容器实例化、配置和管理的对象。Bean是一个被Spring框架管理并且被应用程序各个部分所使用的对象。Spring IoC容器负责Bean的创建、初始化、依赖注入以及销毁等生命周期管理。 注&#xff1a;喜欢的朋友可以关注公众号“JAVA学…...

操作系统实战(二)(linux+C语言)

实验内容 通过Linux 系统中管道通信机制&#xff0c;加深对于进程通信概念的理解&#xff0c;观察和体验并发进程间的通信和协作的效果 &#xff0c;练习利用无名管道进行进程通信的编程和调试技术。 管道pipe是进程间通信最基本的一种机制,两个进程可以通过管道一个在管道一…...

哪些情况下会触发MySQL的预读机制?

MySQL的预读机制主要与其底层存储引擎的实现有关&#xff0c;尤其是InnoDB存储引擎。预读&#xff08;Pre-reading&#xff09;或预取&#xff08;Prefetching&#xff09;是一种性能优化技术&#xff0c;其中数据库系统主动读取可能很快就会被查询到的数据页到缓冲池&#xff…...

react使用谷歌人机验证

在项目中&#xff0c;需要对请求验证&#xff0c;防止被爆破&#xff0c;这里使用的是谷歌的recaptcha-v3。 1.申请谷歌人机验证的api 申请链接,申请完后需要将两个谷歌颁发的key分别写入前&#xff0c;后端的配置环境中&#xff0c;后面会使用. 2.前端部分 前端使用的是viteC…...

java JMH 学习

JMH 是什么&#xff1f; JMH&#xff08;Java Microbenchmark Harness&#xff09;是一款专用于代码微基准测试的工具集&#xff0c;其主要聚焦于方法层面的基准测试&#xff0c;精度可达纳秒级别。此工具由 Oracle 内部负责实现 JIT 的杰出人士编写&#xff0c;他们对 JIT 及…...

本地运行AI大模型简单示例

一、引言 大模型LLM英文全称是Large Language Model&#xff0c;是指包含超大规模参数&#xff08;通常在十亿个以上&#xff09;的神经网络模型。2022年11月底&#xff0c;人工智能对话聊天机器人ChatGPT一经推出&#xff0c;人们利用ChatGPT这样的大模型帮助解决很多事情&am…...

图像处理:时域、空域、频率的滤波介绍

首先要搞清楚为什么会呈现出不同域的维度&#xff0c;来理解和处理图像&#xff0c;原因是图像的构成有多个维度的信息特点。比如一段视频从时间顺序来看&#xff0c;相邻的2个图像帧绝大部分信息是相同的&#xff0c;这就构成了前向预测的理论基础&#xff1b;比如一帧图像从空…...

TC8002D 是一颗带关断模式的音频功放IC

一、一般概述 TC8002D是一颗带关断模式的音频功放IC。在5V输入电压下工作时&#xff0c;负载(3Ω)上的平均功率 为3 W&#xff0c;且失真度不超过10%。而对于手提设备而言&#xff0c;当VDD作用于关断端时&#xff0c;TC8002D将会进入关断模式&#xff0c;此时的功耗极…...

深度学习之基于Vgg19预训练卷积神经网络图像风格迁移系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 在数字艺术和图像处理领域&#xff0c;图像风格迁移技术一直备受关注。该技术可以将一幅图像的内容和…...

MySQL:多表查询练习

#1.出版社信息 与 图书信息 交叉连接 select * from 出版社信息 cross join 图书信息; #2.从“客户信息”和“订单信息”两张数据表中查询购买了商品的客户信息&#xff0c;要求查询结果显示客户姓名、订单编号、订单状态。 select 客户信息.客户姓名,订单信息.订单编号,订单…...

# 从浅入深 学习 SpringCloud 微服务架构(八)Sentinel(1)

从浅入深 学习 SpringCloud 微服务架构&#xff08;八&#xff09;Sentinel&#xff08;1&#xff09; 一、sentinel&#xff1a;概述 1、前言 – 服务熔断 Hystrix 的替换方案。 1&#xff09;2018年底 Netflix 官方宣布 Hystrix 已经足够稳定&#xff0c;不再积极开发 Hys…...

[微信小程序] 入门笔记2-自定义一个显示组件

[微信小程序] 入门笔记2-自定义一个显示组件 0. 准备工程 新建一个工程,删除清空app的内容和其余文件夹.然后自己新建pages和components创建1个空组件和1个空页面. 设定 view 组件的默认样式,使其自动居中靠上,符合习惯.在app.wxss内定义,作用做个工程. /**app.wxss**/ /* 所…...

YOLO代码复现

睿智的目标检测66——Pytorch搭建YoloV8目标检测平台_pytorch_quantization yolov8-CSDN博客 Mask rcnn代码实现_pytorch版_适用30系列显卡_mask rcnn 30显卡-CSDN博客 完整且详细的Yolov8复现训练自己的数据集-CSDN博客...

使用fitten code插件(vscode),替换通义千问,识别需求中的输入输出

今天我们介绍一个工具,具体介绍可以参考我的这篇文章的介绍,支持vs code 插件,Fitten Code是一款由非十科技开发的AI代码助手,旨在通过大模型驱动来提升编程效率和体验-免费神器-CSDN博客https://blog.csdn.net/lijigang100/article/details/137833223?spm=1001.2014.3001…...

vue使用pdfjs-dist在电脑上展示PDF文件

安装 安装的时候一定要带上版本号,这里采用的是2.0.943(因为这个版本对于我目前的项目比较合适可以正常使用,其他版本大概率会报错),当前项目使用的是vue2,vue的版本是2.5.10 npm install pdfjs-dist@2.0.943 查看版本发现这玩意版本非常之多 使用 在使用pdfjs-dist库…...

【网站项目】戒烟网站

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…...

慢性软组织疼痛如何使用DMS深层肌肉刺激仪进行治疗?

使用DMS深层肌肉刺激仪治疗慢性软组织疼痛&#xff0c;可以遵循以下步骤&#xff1a; 准备工作&#xff1a;首先&#xff0c;确保DMS设备已经充电或插上电源&#xff0c;并根据需要调整振动强度和频率。DMS深层肌肉刺激仪是通过快速连续的振动和打击来刺激深层肌肉的设备&#…...

自动化测试常用工具

自动化测试工具是非常重要的。自动化测试工具可以帮助程序员提高工作效率&#xff0c;减少重复劳动和人为错误&#xff0c;提高产品质量。下面我将介绍几个常用的自动化测试工具。 Selenium&#xff1a;Selenium是一个开源的自动化测试框架&#xff0c;用于Web应用程序的自动化…...

【Osek网络管理测试】[TG4_TC4]tWaitBusSleep

🙋‍♂️ 【Osek网络管理测试】系列💁‍♂️点击跳转 文章目录 1.环境搭建2.测试目的3.测试步骤4.预期结果5.测试结果1.环境搭建 硬件:VN1630 软件:CANoe 2.测试目的 验证DUT的tWBS时间参数是否符合NM标准 本处规定tWBS在[1350ms,1650ms]范围内符合要求 3.测试步骤…...

java08基础(值传递和引用传递 类和对象)

目录 一. 值传递和引用传递 1. 值传递 2. 引用传递 二. 面向对象思想 三. 类和对象 1. 类 2. 对象 2.1 使用 2.2 成员变量和局部变量区别 2.3 操作成员方法 2.4 this关键字(初识) 2.5 构造方法 (见java09) 一. 值传递和引用传递 1. 值传递 值传递是指在调用函数时将…...

音频工程师必看:奈奎斯特采样定理在实际录音中的5个常见误区

音频工程师必看&#xff1a;奈奎斯特采样定理在实际录音中的5个常见误区 在专业音频制作领域&#xff0c;采样率设置是决定录音质量的基础性环节。许多工程师虽然熟悉44.1kHz或48kHz这些标准数字&#xff0c;却对背后的奈奎斯特采样定理存在认知偏差。这些误解轻则导致后期处理…...

weixin273基于微信小程序的刷题系统的设计与实现+springboot(文档+源码)_kaic

第4章 系统实现4.1登录功能模块的实现登录功能包括用户登录和管理员登录&#xff0c;在登录界面设计中包括用户名和密码、身份的检验。用户名和密码、身份的检验过程由数据库自动完成&#xff0c;此过程需要1秒左右。首先由用户填写账号和密码&#xff0c;然后选择身份&#xf…...

CSS 嵌套语法最佳实践:从入门到精通的完整指南

CSS 嵌套语法最佳实践&#xff1a;从入门到精通的完整指南 CSS 是流动的韵律&#xff0c;JS 是叙事的节奏。而 CSS 嵌套&#xff0c;是让这份韵律更加优雅、结构更加清晰的魔法。 一、CSS 嵌套&#xff1a;现代样式表的革命 CSS 嵌套&#xff08;Nesting&#xff09;是 CSS 原…...

从1M到1T1M:忆阻器阵列结构演进史及其在AI芯片中的应用前景

从1M到1T1M&#xff1a;忆阻器阵列结构演进史及其在AI芯片中的应用前景 在半导体技术持续突破的今天&#xff0c;忆阻器阵列正以其独特的物理特性重新定义计算架构的边界。这种兼具存储与计算能力的纳米级器件&#xff0c;正在神经网络加速领域展现出颠覆性潜力。本文将带您穿越…...

Ubuntu20.04下HPC_SDK加速库安装避坑指南(附OpenACC测试代码)

Ubuntu 20.04下HPC_SDK加速库深度实战指南&#xff1a;从安装到OpenACC性能调优 在当今高性能计算领域&#xff0c;GPU加速已成为提升计算效率的关键技术。NVIDIA HPC SDK作为一套全面的开发工具包&#xff0c;为开发者提供了从编译器到性能分析的全套解决方案。本文将带您深入…...

如何借助内网穿透工具实现WinSCP跨系统远程文件管理的稳定连接

1. 为什么需要内网穿透实现WinSCP远程文件管理 作为开发者或运维人员&#xff0c;我经常需要在Windows和Linux服务器之间传输文件。最初我尝试用U盘或网盘中转&#xff0c;但效率太低&#xff1b;后来改用WinSCP直连局域网&#xff0c;又遇到跨地域办公的难题。直到发现内网穿透…...

ESP8266 AT指令实战:用NodeMCU连接WiFi并发送HTTP请求(2023最新版)

ESP8266 AT指令实战&#xff1a;用NodeMCU连接WiFi并发送HTTP请求&#xff08;2023最新版&#xff09; 当你拿起一块NodeMCU开发板时&#xff0c;它可能看起来只是块普通的电路板&#xff0c;但内置的ESP8266芯片让它成为了物联网开发的瑞士军刀。不同于Arduino需要额外WiFi模块…...

给SAP财务新人的年结实操笔记:从FAGLGVTR总账结转到F.07往来结转,一次讲清

SAP财务年结实战指南&#xff1a;从总账到往来的完整逻辑解析 刚接触SAP财务模块的新人面对年结时&#xff0c;往往会被一连串的事务代码和操作步骤弄得晕头转向。FAGLGVTR、AJRW、F.07这些看似冰冷的代码背后&#xff0c;其实蕴含着清晰的财务逻辑。本文将带你穿透操作表象&am…...

W5500 TCP客户端实战:从寄存器配置到网络调试助手,手把手打通第一个连接

W5500 TCP客户端开发实战&#xff1a;从硬件连接到数据交互的全流程解析 第一次接触W5500芯片时&#xff0c;我盯着数据手册里密密麻麻的寄存器描述发呆了半小时——网关地址、子网掩码、Socket模式...这些概念对嵌入式开发者来说既熟悉又陌生。本文将带你用最直观的方式理解W…...

你还在用StreamingResponse硬扛LLM流式?FastAPI 2.0全新AsyncIteratorResponse实践已落地金融级AI客服(限前500名获取迁移checklist)

第一章&#xff1a;FastAPI 2.0异步流式响应的核心演进与金融级落地价值FastAPI 2.0 将 StreamingResponse 的底层调度机制从 ASGI 的同步迭代器封装&#xff0c;全面升级为原生协程驱动的异步生成器&#xff08;async def ... yield&#xff09;&#xff0c;彻底消除事件循环阻…...