Spring容器篇

50 阅读3分钟

Spring 容器篇

IOC 控制反转

控制:资源的控制权 反转:和传统方式不同

DI 依赖注入

依赖:组件的依赖关系 注入:通过setter方法、构造器等方式自动注入

pom.xml 里 `<packaging>pom</packaging>` 指定当前项目父项目(父项目通常不包含实际项目)

注册

@Bean 把该方法返回的对象注册到spring容器里

Bean spring容器里管理的对象

​ 名称唯一,同名会被覆盖

组件:具有一定功能的对象,是框架的底层配置

组件的四大特性:名字、类型、对象、作用域。(获取组件可通过名字、类型)

组件是单实例的,且在容器启动过程中就会创建组件对象

@Configiuration 告诉spring这是配置类

配置类:分层管理组件的配置,配置类也是容器中的一种组件

@Controller @Service @Repository @Component

spring提供快MVC分层注解

​ @Controller 控制器

​ @Service 服务层

​ @Repository 持久层

都可以看作组件

分层注解起作用的前提:组件必须在主程序所在包及其子包结构下(不在的话可以用conponentscan 组件批量扫描)

@Import 第三方组件导入容器

导入第三方组件也可以@Bean,自己new注册给容器

@Scope 调整组件作用域

@Scope("prototype") 非单实例 ("singleton") 单实例 默认 (request) 同一个会请求单实例 ("session") 同一个会话单实例>

@Lazy 懒加载

什么时候用什么时候加载

FactoryBean 给容器中制造对象

FactoryBean在容器中放的组件类型是接口中泛型指定的类型,组件的名字是工厂自己的名字

@Conditional 条件注册

达到某种条件才放入注解

派生注解

屏幕截图 2025-09-27 182754.png

注入

@Autowired 自动装配组件

spring提供支持

原理:spring调用容器getBean

流程 一、 1按照类型,找到组件 2多个按名称去找 3找不到报错 二.也可以把这个类型的所有组件都拿来 三.map也可 四整个容器也可

@Qulifier 精确指定

@Qualifier("名字") 如果容器中这样的组件有多个,且有默认,则使用@Qualifier

@Primary 主组件 (默认组件)

剩下就是备胎,一旦存在改属性,就不能实现组件切换

@Resouce 也是自动装配

java提供支持,通用性更好

构造器注入

spring自动取容器找到构造器所需要的所有参数的组件值

只有一个构造方法不用@Autowired也可注入,多个泽需要

setter方法注入

类似构造器

XXXAware 感知接口

让Bean可以感知到spring容器内部的一些资源或环境变量

@Value 给属性赋值

1.@value("字面值")直接赋值

2.@value(“${}")动态(运行时想要再取)从配置文件中取出某一想的值

3.@value(”#{sqel}“)spring expression laguage spring表达式

@ProperSource

说明属性来源,把指定的文件导入容器中,供我们取值使用

1.classpath:……从自己的项目类路劲下找

2.classpath*:……从所有包的类路径下找

Rescouce Utills 资源工具类 获取资源

​ .getFile 方法

@Profile 多环境

@Profile(”环境标号“)当这个环境被激活的时候,才会加入如下组件

环境标示:要先定义环境标识再激活 spring.profiles.actives=-------激活环境

默认 default

classPathXmlApplicationContext()

spring原生启动容器

生命周期

@Bean的时候 可以调用初始化/销毁方法

屏幕截图 2025-09-25 185733.png

屏幕截图 2025-09-25 185818.png @PostConstruct

@PreConstruct

钩子:生命周期或流程的特定时间点,框架预留给开发者可以插入自己代码的位置,是一种"回调机制"

post 在.....之后

pre 在....之前

BeanPostProcessor 后置处理器

​ 允许在Bean初始化前后Bean进行自定义加工/处理

@Test 单元测试