Spring中IOC容器
IoC
IOC容器
IoC是一种设计思想,面向对象编程
Spring通过IoC管理所有Java对象的实例化和初始化,控制对象之间依赖关系
将IoC容器管理的Java对象称为Spring Bean,与new创建的对象没有区别
控制反转(IoC Inversion of Controle)
指将对象的创建权力交给第三方容器负责
依赖注入(DI Dependency Injction)
Spring创建对象过程中,将对象依赖属性通过配置进行注入
DI是IoC思想的具体实现
IoC容器在Spring的实现
IoC容器是IoC思想的产品实现
IoC容器管理组件 -》 Spring的bean或对象
Spring提供的IoC容器实现方法:
BeanFactory
Spring内部接口,不提供给开发人员使用
ApplicationContext
BeanFactory子接口,更多高级特性,面向使用者
ApplicationContext主要实现类:
ClassPathXmlApplicationContext:
读取类路径XML配置文件创建IoC容器对象
FileSystemXmlApplicationContext:
读取系统路径XML配置文件创建IoC容器对象
基于XML管理Bean
ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
id属性是bean的唯一标识
HelloWorld bean = (HelloWorld)ac.getBean(“id”);
HelloWorld bean = (HelloWorld)ac.getBean(“id”);
还可以根据类获取(该类在XML中只能有一个)
不用强制转换成目标类
HelloWorld bean = ac.getBean(HelloWorld.class) ;
还可以标识和类都使用
HelloWorld bean = ac.getBean(HelloWorld.class,”id”) ;
使用setter注入依赖
创建类,在类中创建变量

变量创建set和get方法(或只产生set方法)

这样就可在Spring的xml中注入变量值

为不同对象类型属性赋值
使用外部bean
将XML中其他bean的id填入ref属性中

使用内部bean
在一对property之间创建bean

为数组类型属性赋值

为集合类型属性赋值
private List<> students;

为Map集合类型属性赋值

单实例bean
默认将bean实例化获得的对象是一样的
ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");Hello hello1 = ac.getBean("hello");Hello hello2 = ac.getBean("hello");
hello1和hello2是同一个对象,
但是可以修改为多实例的对象

添加scope属性,其中singleton默认单实例,prototype是多实例
引入外部属性文件
在resources目录中常见properties类型文件

在文件中写入数据(name=value)

在Spring config的beans.xml中引入外部属性文件

最后,可以在beans中使用属性文件中的属性(${name})
![]()
基于注解管理Bean
Spring默认不使用注解
spring config中通过<context:component-scan> 元素开启 Spring Beans的自动扫描功能
自动扫描指定的包及其子类
若某类使用类@Component注解,就将该类装配到容器中来创建bean
@Component:
标识Spring中的Bean,可以应用在任何层次。
@Repository:
标识Bean,用于数据访问层(Dao层),负责与数据库进行交互
@Service:
标识Bean,用于业务层(Service层),调用数据访问层的方法来获取或修改数据
@Controller:
标识Bean,用于控制层(Controller层),处理用户的请求并响应
控制层 -> 业务逻辑层 -> 数据访问层。
开启自动扫描org.example包的类

使用Component注解来标识类
在注解中配置value属性或直接写值,作为该bean的id

bean对象实例化调用无参数构造方法,这里无参数构造方法直接赋值变量
最后在测试类中获取bean并执行

AutoWired注解自动注入
将bean自动注入到对应的类中
只在有注解管理的类中才能只用
省去了bean中配置对象类型<property>的过程
默认根据类型装配(byType),所以AutoWired注解不需要指定名字
创建注解管理的Hello类

创建注解管理的name类
使用Autowired注解注入Hello类

还可以将注解写在setter方法上

还可以将注解写在name的构造方法上
来注入Hello类

配合@Qualifier,让@Autowired根据名称注入
若同一类有多个bean时使用

Resource注解属性注入
和Autowired目的一样
但是Resource注解是根据名字注入的(byName)
若没有名字再byType寻找bean注入
@Resource是JDK扩展包的一部分,@AutoWired是Spring的一部分。
JDK扩展包需要额外引入


相关文章:
Spring中IOC容器
IoC IOC容器 IoC是一种设计思想,面向对象编程 Spring通过IoC管理所有Java对象的实例化和初始化,控制对象之间依赖关系 将IoC容器管理的Java对象称为Spring Bean,与new创建的对象没有区别 控制反转(IoC Inversion of Controle&a…...
php redis分布式锁
一,概念 在PHP中实现分布式锁通常可以使用数据库、缓存系统(如Redis)或者其他中央存储系统来保证在分布式系统中的数据一致性与同步。秒杀下单、抢红包等等业务场景,都需要用到分布式锁。 常规方案大概有七中 方案一:…...
kotlin 中的布尔
1、kotlin中内置的Boolean类型,可以有true与false两个值的布尔对象。 布尔值的内置运算有(跟很多语言如java、js一摸一样): ||——逻辑或&&——逻辑与!——逻辑非 fun main() {val a: Boolean trueval b: Boolean fa…...
有哪些ai聊天推荐?简单分享三款
有哪些ai聊天推荐?在当今数字化时代,人工智能(AI)聊天软件已经成为我们日常生活中不可或缺的一部分。无论是与朋友、家人还是同事交流,这些智能聊天软件都能为我们提供极大的便利。那么,市面上有哪些值得推…...
Python第二语言(十、Python面向对象(上))
目录 1. 标记变量的基础类型 2. 初识对象 2.1 使用对象组织数据 3. 成员变量 3.1 类和类成员的定义 3.2 成员变量和成员方法使用 3.3 成员方法的定义语句 4. 类和对象class Clock: def ring(self): 4.1 创建类对象的语法:对象名 类名称() 4.2 用生活中的…...
SolidWorks 2016 SP5安装教程
软件介绍 Solidworks软件功能强大,组件繁多。 Solidworks有功能强大、易学易用和技术创新三大特点,这使得SolidWorks 成为领先的、主流的三维CAD解决方案。 SolidWorks 能够提供不同的设计方案、减少设计过程中的错误以及提高产品质量。SolidWorks 不仅…...
为什么高考志愿只选计算机专业?
刚刚高考结束,不知道各位学弟学妹考的怎么样啊? 高考毕竟是对十二年寒窗苦读的评判,也是很多人改变命运的机会。很多同学每天等待出分的过程很煎熬,既吃不好也玩不好(os:这种同学还挺多的)。 但…...
GPT大模型微调-提高垂直领域回答质量
微调一个大模型并测试微调后的效果是一个很好的学习实践。下面是一个逐步指导,帮助你使用一个较小的预训练大模型进行微调,并测试其效果。我们将使用 Hugging Face 的 Transformers 库和一个较小的预训练模型,如 DistilBERT。这个库非常流行且易于使用。 实现步骤 步骤 1:…...
全网首发-Docker被封后的代理设置教程
最近上交、科大以及阿里的一些docker镜像,好像都因为不可控力导致无法访问。 所以,之前好多正常的一些镜像的打包都会报错: 比如: #1 [internall load build definition from Dockerfile#1transferring dockerfile:972B done#1 D…...
代码随想录算法训练营第五十七天|1143.最长公共子序列、1035.不相交的线、53. 最大子序和、392.判断子序列
代码随想录算法训练营第五十七天 1143.最长公共子序列 题目链接:1143.最长公共子序列 确定dp数组以及下标的含义:dp[i][j] :以下标i - 1为结尾的text1,和以下标j - 1为结尾的text2,最长重复子数组长度为dp[i][j]确…...
RocketMQ事务性消息
RocketMQ事务性消息是一定能保证消息发送成功的 事务消息发送步骤: (1)发送方将半事务消息发送至RocketMQ服务端。 (2)RocketMQ服务端将消息持久化之后,向发送方返回ack确认消息已经发送成功。由于消息为…...
mysql (事物)
一.什么是事物 事物是一组操作的集合,不可分割的工作单位,事物会把所有的操作当作一个整体一起向系统提交或撤销操作请求,就是这些操作要么一起成功要么一起失败。 二.事物操作 (这个就是一个理解) 1.事务特性 原子性…...
kotlin 中的字符串
一、字符类访问 1、字符串的访问跟js一样,可以使用索引来访问或者直接循环。 fun main() {val a: String "2024"// 方式一:for (item in a) {println(item) // 输出每一个字符}// 方式二:println("${a[0]}, ${a[1]}, ${a[2…...
网站线上模板建设的优缺点
优点: 1.搭建的时间短,在线建站,只需要登录注册然后选择网站模板创建网站即可管理自己的网站后台,就几步操作就可以实现。 2.网站出错率少,因为有很多用户在使用,前期所报出来的问题就已经一一…...
哲学家进餐问题
1.最多允许四个哲学家同时进餐,保证有一个筷子是空闲的,从而保证能有有一个哲学家成功进餐,而不导致死锁 semaphore chopstick[5] {1, 1, 1, 1, 1}, mutex4; Pi(){do{think...P(mutex);P(chopstick[i]);P(chopstick[(i1)%5);eat...V(mutex)…...
无人机遥感在农林信息提取中的实现方法与GIS融合应用
在新一轮互联网信息技术大发展的现今,无人机、大数据、人工智能、物联网等新兴技术在各行各业都处于大爆发的前夜。为了将人工智能方法引入农业生产领域。首先在种植、养护等生产作业环节,逐步摆脱人力依赖;在施肥灌溉环节构建智慧节能系统&a…...
联想测开一面(电话面试)笔试60%
联想测开一面(电话面试)笔试60% 3.21 无自我介绍 基本问项目,问实习 对python自动化测试了解多少 讲一下python中打包和解包的概念 学校无测试相关课程,平时用什么平台去学习的 计算机底层实现原理简要说说(软硬结合&…...
【python】tkinter GUI开发: Button和Entry的应用实战探索
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...
sm2证书生成(openssl3.0)
1、下载安装包 https://www.openssl.org/source/openssl-3.0.14.tar.gz 2、解压到指定位置 /appserver/openssl-3.0.14 3、安装依赖包 yum -y install gcc perl make zlib-devel perl-CPAN 4、编译 ./config shared --prefix/appserver/SM make depend make make install 5…...
java计算年化利率
接了业务需求需要计算年化利率, 公式定义: IRR计算 在计算 IRR 时,我们希望找到一个折现率r,使得净现值(NPV)为零。NPV 函数定义如下: NPV ∑ t 0 n C t ( 1 r ) t \text{NPV} \sum_{t0}…...
Cursor-Learner:基于编辑器历史数据,自动生成个性化AI编程助手Prompt
1. 项目概述:一个帮你“诊断”编程习惯的智能助手 如果你和我一样,每天都在和 Cursor 或 WindSurf 这类 AI 驱动的代码编辑器打交道,那你肯定也遇到过这样的困惑:为什么有时候 AI 助手能精准地理解你的意图,写出漂亮的…...
模块化IC设计流程:应对复杂芯片挑战的解决方案
1. 现代IC设计面临的挑战与模块化流程的价值在当今半导体行业,芯片设计团队正面临前所未有的复杂挑战。随着工艺节点不断演进至5nm及以下,设计复杂度呈指数级增长。我曾参与的一个65nm SoC项目,团队最初采用传统线性设计流程,结果…...
城市级智慧停车平台建设思路:如何整合多个停车项目的数据
引言随着城市化进程的加速和机动车保有量的持续攀升,"停车难、停车乱"已经成为困扰各大城市的普遍性问题。根据公安部统计数据,截至2025年底,全国机动车保有量已突破4.5亿辆,而城市停车位缺口预计超过8000万个。与此同时…...
脉冲神经网络SAST训练方法:解决代理-硬件转换差距
1. 脉冲神经网络与传感器计算的挑战脉冲神经网络(SNNs)作为第三代神经网络模型,其核心特征是采用离散的脉冲信号进行信息传递和处理。这种事件驱动的计算方式与传统的连续激活神经网络(ANNs)有着本质区别。在传感器端计…...
Cursor-Buddy:基于AI的Web界面语音交互与视觉引导助手
1. 项目概述与核心价值最近在捣鼓一个挺有意思的开源项目,叫cursor-buddy。简单来说,它是一个能“住”在你鼠标光标里的AI助手,专门为Web应用设计。想象一下,你在浏览一个复杂的后台管理系统或者一个数据看板,突然想找…...
Windows驱动存储深度管理:DriverStore Explorer专业指南
Windows驱动存储深度管理:DriverStore Explorer专业指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 在Windows系统维护的众多任务中,驱动程序管理往往是最容…...
Apache Airflow 系列教程 | 第30课:Deadline 与 SLA 管理
导读(Introduction) 在生产环境中运行的数据管道,"按时完成"往往和"正确完成"同样重要。当一个关键的每日报表管道必须在早上 8 点前完成,或者当一个下游系统依赖的数据必须在特定时间窗口内准备就绪时,仅仅依靠"失败后告警"是不够的——我…...
当FanControl风扇集体“罢工“:从系统诊断到完美修复的技术探险
当FanControl风扇集体"罢工":从系统诊断到完美修复的技术探险 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/G…...
泉盛UV-K5/K6终极升级指南:解锁自定义固件的全功能潜力
泉盛UV-K5/K6终极升级指南:解锁自定义固件的全功能潜力 【免费下载链接】uv-k5-firmware-custom 全功能泉盛UV-K5/K6固件 Quansheng UV-K5/K6 Firmware 项目地址: https://gitcode.com/gh_mirrors/uvk5f/uv-k5-firmware-custom 还在为对讲机功能单一而烦恼吗…...
45.什么是内联条件表达式(inline conditional expressions)?在事件处理里怎么用?
内联条件表达式指的是:你在 JSX 里直接用 JavaScript 条件语法(如三元 ? :、逻辑与 &&、逻辑或 ||)来决定事件处理函数是否执行、执行哪段逻辑,或给事件处理器提供一个默认值。它能让事件行为跟 props/state 动态绑定&am…...
