IOC容器
1. IOC基本概念:
- 控制反转(Inversion of Control,缩写为IoC)
- 使用IOC目的是为了降低耦合度
2. IOC底层原理
- xml解析、工厂模式、反射
3. IOC(接口)
1. BeanFactory:
IOC容器的基本实现,是Spring内部的使用接口,不提供开发人员进行使用。
区别:(加载配置文件时不创建对象,在获取对象(使用时)才创建对象)
2. ApplicationContext(一般用这种方式):
BeanFactory接口的子接口,提供更多更强大的功能,一般由开发人员使用。
区别:(加载配置文件时就会把配置文件对象进行创建)
3. IOC操作Bean管理
1. 什么是Bean管理
- Spring创建对象
- Spring注入属性
2. Spring 有两种类型的 bean
-
普通bean
:在配置文件中定义的bean
类型就是返回类型。(定义什么返回什么)-
创建类,创建配置文件
-
测试类测试
-
-
工厂bean(FactoryBean)
:在配置文件中定义的bean
类型可以和返回的类型不一样(多态?)- 创建类,让这个类作为工厂bean,实现接口 FactoryBean
- 实现接口里面的方法,在实现的方法中定义返回的bean类型
3. Bean管理的实现方式
1. 基于 xml 配置文件方式实现
-
创建对应的
bean.xml
文件中使用bean
标签,标签里添加对应的属性,即可实现对象的创建。 -
创建对象的时候也是默认执行无参构造器完成对象创建。
-
-
在Bean标签中有许多属性,这里介绍下常用属性
- id属性:唯一标识,在bean中生成对象的别名。
- class属性:类全路径(包类路径)
2. Bean管理 xml 方式(注入属性)
- xml 的注入方式也是通过get/set方法注入
-
使用
set
方法注入-
常规方式
-
xml配置文件方式
-
写好xml配置文件
-
调用xml配置文件
-
-
-
有参构造注入
-
常规方式
-
xml配置文件方式
-
创建类,定义属性,创建对应的有参构造器
-
配置好xml配置文件里的Bean标签
-
测试类中测试
-
-
-
P名称空间注入(了解)
- 使用 p 名称空间注入,可以简化基于 xml 配置方式
3. Bean管理 xml 方式(注入其他类型属性)
1. 字面量
-
null 值
-
不注入值也为属性的值也为
null
,写了增加程序的可读性。大概? -
xml 配置文件中不设值添加
<null/>
标签 -
address 属性中注入的值就设置为
null(空)
-
-
属性包含特殊符号
-
两种方法:
-
将特殊符号进行转义
<
>
,再注入。 -
将带特殊符号的内容写到CDATA
-
-
4. Bean管理 xml 方式(注入外部Bean)
1. 注入属性-外部bean
-
创建两个类
service
类和dao
类-
service
类 -
dao
类
-
-
在
service
调用dao
里面的方法 -
在Spring配置文件中进行配置
-
在测试类中测试
2. 注入属性-内部Bean
-
一对多关系:部门和员工
- 一个部门包含多个员工
- 一个员工属于一个部门
-
在实体类中表示一对多的关系
-
部门类
-
员工类
-
-
在 spring 配置文件中进行配置
3. 注入属性-级联赋值
-
和外部bean的区别就是在外部bean中赋值再传入
5.Bean管理 xml 方式(注入集合类型属性)
1. 注入数组类型属性
-
在
xml
配置文件中创建对象 -
使用
<array>
标签注入
2. 注入 List 集合类型属性
-
同上大同小异,List集合类型就用List标签注入
3. 注入 Map 集合类型
-
使用
4. 在集合里面设置对象类型值
(用上再看)
5. 把集合注入部分提取出来
-
使用util标签
-
创建好后直接在xml配置文件创建的对象中应用
6. 基于注解方式实现
-
什么是注解
- 注解是代码的特殊标记,格式:@注解名称(属性名称=属性值,属性名称=属性值......)
- 使用注解,注解作用在类上面,方法上面,属性上面
- 注解的目的:简化 xml 配置
-
Spring
针对Bean
管理中创建对象提供的注解- @Conponent
- @Service
- @Controller
- @Repository
以上四个注解实现的功能是一样的,都可以用来创建Bean的实例,名称只是用来区分在哪个层
-
基于注解的方式创建对象
-
基于注解的方式注入属性
-
常用的注入属性的注解
-
@AutoWired:根据属性类型进行自动装配
-
把 service 和 dao 对象创建,在 service 和 dao 类添加创建对象的注解
-
UserService
-
UserDao
-
-
在 service 注入 dao 对象
-
在 service 类添加 dao 类型的属性,在属性上面使用注解
-
-
-
@Qualifier:根据属性名称进行注入
-
这个注解得和上面的
@AutoWired
注解一起使用 -
@AutoWired
注解根据类型注入,如果一个接口有多个实现类,@Qualifier
就能指定名称注入指定的实现类
-
-
@Resource:可以根据属性类型注入,也可以根据名称注入
-
根据类型注入
-
根据名称注入
-
@Resource
注解集合了@AutoWired
和@Qualifier
注解 -
@Resource
注解不是Spring官方包里的,是javax包中的,官方更推荐使用@AutoWired
和@Qualifier
注解
-
-
@Value:注入普通类型属性
-
在需要注入的地方上加上注解
-
@Value
注解有点脱裤子放屁的感觉?直接赋值不香?
-
-
-
-
纯注解开发
-
创建配置类,替代 xml 配置文件
@Configuration
注解可以标识这个类为配置类@ComponentScan
注解代替xml配置文件的开启组件扫描
-
编写测试类
AnnotationConfigApplicationContext
里的值是配置类的名称
-
4. Bean 的作用域
-
在 Spring 里面,默认创建单实例对象。(每次获取该对象都是同一地址)
-
在 Spring 里面,可以设置创建
bean
实例是单实例还是多实例(每次获取该对象都是不同的地址,创个新的)-
在 Spring 配置文件
bean
标签里面有属性scope
用于设置单实例还是多实例 -
scope
属性值(常用值)-
singleton(默认值):表示单实例对象,
-
prototype:表示多实例对象,
-
-
-
singleton
和prototype
的区别- scope值为
singleton
时,加载spring配置文件时就会创建对象 - scope值为
prototype
时,加载spring
配置文件时不会创建对象,在调用 getBean 方法的时候才创建多实例对象。
- scope值为
5. bean 生命周期
- 生命周期
- 从对象创建到对象销毁的过程
- bean 生命周期
- 通过构造器创建 bean 实例(无参构造)
- 为 bean 的属性设置值和对其他 bean 的应用(调用 set 方法)
- 调用 bean 的初始化的方法(需要进行配置初始化的方法)
- bean 可以使用了(获取到对象)
- 当容器关闭的时候,调用 bean 的销毁的方法(需要进行配置销毁的方法)
6. XML 自动装配
-
什么是自动装配
- 根据指定装配额规则(属性名称或者属性类型), Spring 自动将匹配的属性进行注入
-
使用
autowire
属性实现自动装配 -
autowire属性常用值:
- byName:根据属性名称注入(注入值bean的id值要和类属性的名称一致)
- byType:根据属性类型注入
__EOF__

本文链接:https://www.cnblogs.com/WNAOII/p/15252841.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」