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

【spring(一)】核心容器总结

🌈键盘敲烂,年薪30万🌈

 

目录

IOC 配置bean对象:

DI 注入bean对象

①.setter方法注入

②.构造器注入

Bean的实例化

1.setter方法注入(重点)

2.静态工厂(了解)

3.实例工厂(了解)

4.FactoryBean方式注入(重点)

bean的声明周期

bean的自动装配

管理第三方的bean


IOC 配置bean对象:

配置文件配置bean

        id:bean的名称

        class:bean的类型

<bean id = "bookDao" class = "com.itpan.Dao.impl.BookDaoImpl"/>

DI 注入bean对象

①.setter方法注入

        setter方法注入 使用<properties> 标签,通过set方法为bean对象赋值,推荐使用

注入引用类型

        name = "xxx" ref = "xxx"

        name后面要与set方法的形参保持一致,ref要与bean的id保持一致

<bean id = "bookDao" class = "com.itpan.Dao.impl.BookDaoImpl"><properties name = "bookDao" ref = "bookDao"/>
</bean>

 注入基本数据类型

        name = "xxx" value = "xxx"

<bean id = "bookDao" class = "com.itpan.Dao.impl.BookDaoImpl"><properties name = "IdCard" value = "123"/>
</bean>

注入集合数组等类型

        当集合类型进行注入时,使用相应标签(list、set、array、map...)对属性值进行注入。

<bean id="school" class="com.muyu.pojo.School"><property name="classes"><list><value>10</value><value>11</value><value>12</value></list><!--1. array集合<array><value></value></array>2. set集合<set><value></value></set>3. map集合<map><entry value="" ket=""></entry></map>--></property>
</bean> 
②.构造器注入

        构造器注入,使用<constructor-arg>标签,在整合第三方框架的时候使用

<bean id = "bookDao" class = "com.itpan.Dao.impl.BookDaoImpl"><constructor-arg name = "bookDao" ref = "bookDao"/>
</bean>

    setter注入和构造器注入并无太大区别,一个是运用setter方法,一个是运用构造器,构造器注入将properties标签改完constructor-arg 即可。

Bean的实例化

1.setter方法注入(重点)

        在相应类中提供set方法

public class BookServiceImpl implements Bookservice {BookDao bookDao;@Overridepublic void save() {System.out.println("Bookservice save is running");bookDao.save();}//提供set方法public void setBookDao(BookDao bookDao) {this.bookDao = bookDao;}
}
2.静态工厂(了解)
public class BookDao1Factory {public static BookDao1 getBookDao1(){System.out.println("BookDao1Factory null constructor is running");return new BookDao1Impl();}
}
3.实例工厂(了解)

        跟setter方法冗余,不再赘述。

4.FactoryBean方式注入(重点)

        创建一个FactoryBean的类,实现factorybean<E>接口,用于实例化bean对象,通过getObject创建对象,getObjectType指定对象类型。

package itpan.factory;import itpan.Dao.BookDao1;
import itpan.Dao.impl.BookDao1Impl;
import org.springframework.beans.factory.FactoryBean;public class BookDao1FactoryBean implements FactoryBean<BookDao1> {// 替代静态静态工厂中的get方法@Overridepublic BookDao1 getObject() throws Exception {return new BookDao1Impl();}// 创建的bean是什么类型的@Overridepublic Class<?> getObjectType() {return BookDao1.class;}
}

 

bean的声明周期

  • 执行构造方法实例化bean对象
  • 设置属性
  • 初始化
  • 关闭容器bean自动销毁

例如以下程序:

package itpan.Dao.impl;import itpan.Dao.BookDao1;
import itpan.Dao.BookDao2;
import itpan.Dao.BookDao3;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;public class BookDao1Impl implements BookDao1, InitializingBean, DisposableBean {BookDao2 bookDao2;BookDao3 bookDao3;public void setBookDao2(BookDao2 bookDao2) {this.bookDao2 = bookDao2;}public void setBookDao3(BookDao3 bookDao3) {this.bookDao3 = bookDao3;}public void save() {System.out.println("bookdao1 is running");bookDao2.save();bookDao3.save();}@Overridepublic void afterPropertiesSet() throws Exception {System.out.println("dao init...");}@Overridepublic void destroy() throws Exception {System.out.println("dao close...");}
}

测试类:

package itpan;import itpan.Dao.BookDao1;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestBeanCycle {public static void main(String[] args) {// bean的生命周期// 1.new bean// 2.执行构造方法// 3.set设置属性// 4.init初始化bean// 容器关闭触发bean的销毁// 两种方法// 1.手工关闭 2.注册关闭钩子ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");// 设置关闭钩子ctx.registerShutdownHook();BookDao1 bookDao1 = (BookDao1) ctx.getBean("bookDao1");bookDao1.save();
//        ctx.close();}
}

注意:

创建bean对象默认调用空参构造,如果没有空参构造,程序会抛出异常。

bean的自动装配

很简单,在配置bean对象时将autowrie属性设置为true

<bean id="bookDao1" class="itpan.Dao.impl.BookDao1Impl" autowire="byType"/>

管理第三方的bean

1.引入properties文件

2.开启context命名空间

3.使用context:property-placeholder加载命名空间

<?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: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/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!--引入properties文件--><!--1.开启context命名空间--><!--2.使用context加载命名空间--><context:property-placeholder location="classpath*:*.properties"/><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></bean>

相关文章:

【spring(一)】核心容器总结

&#x1f308;键盘敲烂&#xff0c;年薪30万&#x1f308; 目录 IOC 配置bean对象&#xff1a; DI 注入bean对象 ①.setter方法注入 ②.构造器注入 Bean的实例化 1.setter方法注入(重点) 2.静态工厂&#xff08;了解&#xff09; 3.实例工厂&#xff08;了解&#xff0…...

易点易动固定资产管理系统:实现全面的固定资产采购管理

在现代企业中&#xff0c;固定资产采购管理是一项关键的任务。为了确保企业的正常运营和发展&#xff0c;有效管理和控制固定资产采购过程至关重要。易点易动固定资产管理系统为企业提供了一种全面的解决方案&#xff0c;整合了从采购需求、采购计划、询比价、采购合同到采购执…...

力扣:178. 分数排名(Python3)

题目&#xff1a; 表: Scores ---------------------- | Column Name | Type | ---------------------- | id | int | | score | decimal | ---------------------- 在 SQL 中&#xff0c;id 是该表的主键。 该表的每一行都包含了一场比赛的分数。Score …...

raid磁盘阵列

在单机时代&#xff0c;采用单块磁盘进行数据存储和读写的方式&#xff0c;由于寻址和读写的时间消耗&#xff0c;导致I/O性能非常低&#xff0c;且存储容量还会受到限制。另外&#xff0c;单块磁盘极其容易出现物理故障&#xff0c;经常导致数据的丢失。此时&#xff0c;RAID技…...

SpringBoot学习笔记-实现微服务:匹配系统(上)

笔记内容转载自 AcWing 的 SpringBoot 框架课讲义&#xff0c;课程链接&#xff1a;AcWing SpringBoot 框架课。 CONTENTS 1. 配置WebSocket2. 前后端WebSocket通信2.1 WS通信的建立2.2 加入JWT验证 3. 前后端匹配业务3.1 实现前端页面3.2 实现前后端交互逻辑3.3 同步游戏地图 …...

重磅!全球首个“绿色黑灯工厂”落户中国,竟然是这家企业……

作者&#xff1a;叶蓁 “52”、“白加黑”、“无人看守作业”&#xff0c;这是九牧“绿色黑灯工厂”的几大关键词。 九牧绿色黑灯工厂不仅是单体产量最大的工厂&#xff0c;也是全球首个入选的“绿色黑灯工厂”。 11月17日&#xff0c;中国节能协会授予九牧5G智能马桶工厂全球…...

go语言学习-异常处理

1、异常场景 网络故障硬件故障组件故障输入错误逻辑错误链路调度错误 2、异常处理方式 # python或者java异常处理 try 可能出现的错误 catch对错误进行处理 xxx,err : 代码 if err ! nil {代码出现错误&#xff0c;需要做处理 }3、自定义错误 有两种方法&#xff1a;1、通过…...

如何使用 JavaScript 实现图片上传并转换为 LaTeX 公式

在本教程中&#xff0c;我们将学习如何使用 JavaScript 创建一个上传图片的功能&#xff0c;并将所选图片转换为 LaTeX 公式。我们将使用 FileReader 对象来读取图片并将其转换为 Base64 格式&#xff0c;然后利用 img2latex API 将其转换为 LaTeX 公式。 1. HTML 结构 首先&…...

深刻理解MySQL8游标处理中not found

深刻理解MySQL8游标处理中not found 最近使用MySQL的游标&#xff0c;在fetch循环过程中&#xff0c;程序总是提前退出 &#xff0c;百思不得其解&#xff0c;经过测试&#xff0c;原来是对于游标处理中not found的定义理解有误&#xff0c;默认是视同Oracle的游标not found定…...

甄知燕千云与SAP、EBS、TC、NS等应用深度集成,智能提单一键畅通,效能一键提升

当今全球化时代下&#xff0c;全球商业环境面临前所未有的机遇和挑战&#xff0c;企业需要持续的业务变革、组织优化来进行降本增效&#xff0c;企业管理软件已成为中小企业、大型企业数字化转型不可或缺的管理工具&#xff0c;企业内管理软件系统也越来越多。 为了适应当前企业…...

第99步 深度学习图像目标检测:SSDlite建模

基于WIN10的64位系统演示 一、写在前面 本期&#xff0c;我们继续学习深度学习图像目标检测系列&#xff0c;SSD&#xff08;Single Shot MultiBox Detector&#xff09;模型的后续版本&#xff0c;SSDlite模型。 二、SSDlite简介 SSDLite 是 SSD 模型的一个变种&#xff0c…...

用EasyAVFilter将网络文件或者本地文件推送RTMP出去的时候发现CPU占用好高,用的也是vcodec copy呀,什么原因?

最近同事在用EasyAVFilter集成在EasyDarwin中做视频拉流转推RTMP流的功能的时候&#xff0c;发现怎么做CPU占用都会很高&#xff0c;但是视频没有调用转码&#xff0c;vcodec用的就是copy&#xff0c;这是什么原因呢&#xff1f; 我们用在线的RTSP流就不会出现这种情况&#x…...

Vatee万腾科技的独特力量:Vatee数字时代创新的新视野

在数字化时代的浪潮中&#xff0c;Vatee万腾科技以其独特而强大的创新力量&#xff0c;为整个行业描绘了一幅崭新的视野。这不仅是一场科技创新的冒险&#xff0c;更是对未来数字时代发展方向的领先探索。 Vatee万腾将创新视为数字时代发展的引擎&#xff0c;成为推动行业向前的…...

【JavaSE】基础笔记 - 异常(Exception)

目录 1、异常的概念和体系结构 1.1、异常的概念 1.2、 异常的体系结构 1.3 异常的分类 2、异常的处理 2.1、防御式编程 2.2、异常的抛出 2.3、异常的捕获 2.3.1、异常声明throws 2.3.2、try-catch捕获并处理 3、自定义异常类 1、异常的概念和体系结构 1.1、异常的…...

QTableWidget——编辑单元格

文章目录 前言熟悉QTableWiget&#xff0c;通过实现单元格的合并、拆分、通过编辑界面实现表格内容及属性的配置、实现表格的粘贴复制功能熟悉QTableWiget的属性 一、[单元格的合并、拆分](https://blog.csdn.net/qq_15672897/article/details/134476530?spm1001.2014.3001.55…...

编译QT Mysql库并集成使用

安装MSVC编译器与Windows 10 SDK 打开Visual Studio Installer&#xff0c;如果已经安装过内容了可能是如下页面&#xff0c;点击修改&#xff08;头一回打开的话不需要这一步&#xff09;&#xff1a; 然后在工作负荷中勾选使用C的桌面开发&#xff0c;它会帮我们勾选好一些…...

利用企业被执行人信息查询API保障商业交易安全

前言 在当今竞争激烈的商业环境中&#xff0c;企业为了保障商业交易的安全性不断寻求新的手段。随着技术的发展&#xff0c;利用企业被执行人信息查询API已经成为了一种强有力的工具&#xff0c;能够帮助企业在商业交易中降低风险&#xff0c;提高合作的信任度。 企业被执行人…...

【深度学习】P1 深度学习基础框架 - 张量 Tensor

深度学习基础框架 张量 Tensor 张量数据操作导入创建张量获取张量信息改变张量张量运算 张量与内存 张量 Pytorch 是一个深度学习框架&#xff0c;用于开发和训练神经网络模型。 而其核心数据结构&#xff0c;则是张量 Tensor&#xff0c;类似于 Numpy 数组&#xff0c;但是可…...

vue2 识别页面参数中的html

在Vue 2中&#xff0c;你可以使用v-html指令来识别页面参数中的HTML内容。v-html指令允许你将HTML代码作为Vue模板的一部分进行渲染。 以下是一个示例&#xff0c;演示了如何在Vue 2中使用v-html指令来识别页面参数中的HTML内容&#xff1a; <template><div v-html&…...

matlab 一些画图法总结(持续更新)

*****************************************画Dmd_L极坐标表示法**************************************** if(~exist(Dmd_L_array)) Dmd_L_array []; end Dmd_L_array [Dmd_L_array; Dmd_L]; thetaangle(Dmd_L_array); rabs(Dmd_L_array); polarplot(theta,r,o); *****…...

深入理解W25Q64:基于STM32的SPI Flash存储管理实战(含扇区/块擦除策略)

深入理解W25Q64&#xff1a;基于STM32的SPI Flash存储管理实战 在嵌入式系统开发中&#xff0c;外部Flash存储器扮演着至关重要的角色。W25Q64作为一款8MB容量的SPI NOR Flash芯片&#xff0c;因其高性价比和易用性&#xff0c;成为众多STM32项目的首选存储方案。但真正要发挥它…...

Windows Defender 深度卸载:创新模块化架构彻底释放系统性能

Windows Defender 深度卸载&#xff1a;创新模块化架构彻底释放系统性能 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https://gitcode.com/gh_mirro…...

基于GCP的云原生AI智能体快速部署:基础设施即代码实践指南

1. 项目概述&#xff1a;一个云原生智能体的“样板间”最近在折腾云原生和AI应用开发&#xff0c;发现很多朋友想把手头的AI模型或者智能体&#xff08;Agent&#xff09;部署到云端&#xff0c;但往往卡在第一步&#xff1a;环境搭建和基础架构配置。这让我想起了自己刚开始接…...

Allegro异形焊盘避坑指南:Shape Symbol导入层设置与阻焊开窗的正确姿势

Allegro异形焊盘设计实战&#xff1a;从Shape Symbol导入到阻焊开窗的完整避坑手册 在高速连接器与金手指封装设计中&#xff0c;异形焊盘的精确实现往往是工程师面临的第一个技术门槛。许多用户按照教程步骤操作时&#xff0c;常会在DXF导入失败、阻焊开窗不规范等环节反复踩坑…...

【独家首发】MCP 2026适配倒计时:仅剩117天!金融/制药/材料三大头部客户紧急切换实录

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;MCP 2026量子计算适配全景图 MCP 2026&#xff08;Multi-Controller Protocol 2026&#xff09;是新一代面向容错量子计算系统的控制协议标准&#xff0c;专为超导量子处理器与光子量子芯片的混合异构架…...

PPTX2HTML技术深度解析:纯前端PPTX转HTML的架构设计与实现

PPTX2HTML技术深度解析&#xff1a;纯前端PPTX转HTML的架构设计与实现 【免费下载链接】PPTX2HTML Convert pptx file to HTML by using pure javascript 项目地址: https://gitcode.com/gh_mirrors/pp/PPTX2HTML PPTX2HTML是一款基于纯JavaScript技术栈的开源工具&…...

Tool.Net 3.0.0正式版发布:如何用MapApiRoute和AshxRoute特性玩转灵活API路由?

Tool.Net 3.0.0路由革命&#xff1a;MapApiRoute与AshxRoute的实战进阶指南 当ASP.NET Core开发者遇到需要为复杂业务系统设计多层级API路由时&#xff0c;传统配置方式往往显得力不从心。Tool.Net 3.0.0带来的MapApiRoute方法与AshxRoute特性组合&#xff0c;正在改变这一局面…...

终极指南:3分钟掌握WindowResizer,告别Windows窗口尺寸限制烦恼

终极指南&#xff1a;3分钟掌握WindowResizer&#xff0c;告别Windows窗口尺寸限制烦恼 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 你是否遇到过这样的情况&#xff1a;老旧的…...

告别在线转换网站:手把手教你用macOS终端玩转图片格式(sips/convert实战)

告别在线转换网站&#xff1a;macOS终端图片处理全攻略 每次需要转换图片格式时&#xff0c;你是否也厌倦了那些广告满天飞的在线转换网站&#xff1f;上传等待、隐私担忧、网络依赖…这些问题在macOS终端面前都不复存在。今天我们就来彻底解放双手&#xff0c;用系统原生工具…...

你的Windows系统管家:如何用批量卸载工具让电脑重获新生?

你的Windows系统管家&#xff1a;如何用批量卸载工具让电脑重获新生&#xff1f; 【免费下载链接】Bulk-Crap-Uninstaller Remove large amounts of unwanted applications quickly. 项目地址: https://gitcode.com/gh_mirrors/bu/Bulk-Crap-Uninstaller 你是否经历过这…...