配置优先级
配置文件优先级

Java系统属性/命令行参数

优先级排序

Bean类的管理
bean的获取

注入一个IOC容器对象,通过调用IOC对象里的方法获取bean对象
bean的作用域配置
| 序号 | 作用域名称 | 关键字 | 实例数量 / 创建时机 | 适用场景 | 备注 |
| 1 | 单例 | singleton | 一个实例(默认)/ 容器启动时(懒加载除外) | 无状态 Bean,如 Service、DAO、Controller。 | 默认值,最常用。 |
| 2 | 原型 | prototype | 每次请求创建一个新实例。 | 有状态 Bean,如 ThreadLocal 工具类、每次需要独立数据的对象。 | Spring 不负责销毁。 |
| 3 | 请求 | request | 一次 HTTP 请求创建一个新实例。 | 存储与当前请求相关的数据。 | 仅限 Web 环境。 |
| 4 | 会话 | session | 一个 HTTP Session创建一个新实例。 | 存储用户会话数据,如购物车、登录信息。 | 仅限 Web 环境。 |
| 5 | 应用 | application | 一个 Web 应用创建一个新实例。 | 存储应用级的共享配置或计数器。 | 类似于 singleton 但绑定到 ServletContext。 |
| 6 | WebSocket | websocket | 一个 WebSocket 会话创建一个新实例。 | 专用于 WebSocket 连接。 | 仅限 WebSocket 环境。 |
⚠️ 关键点回顾
-
默认值: 如果不指定,所有 Bean 默认为
singleton。 -
有状态 vs. 无状态: 无状态的 Bean(不持有业务数据)使用
singleton;有状态的 Bean(持有特定数据)使用prototype或 Web 作用域。 -
作用域冲突: 当长生命周期的 Bean 依赖短生命周期的 Bean 时,需使用
proxyMode(如ScopedProxyMode.TARGET_CLASS)来解决。

@Scope注释作用于bean类声明bean作用域

@Lazy注解:作用于bean类,延迟bean初始化直到第一次使用则会创建bean对象实例

第三方bean的配置
通过@bean注解声明第三方bean对象:
定义一个新配置类中通过创建一个方法返回一个bean对象实例,springboot通过@bean注解识别该bean对象并存储在IOC容器中


Springboot原理
起步依赖
通过Maven的依赖传递,使引入一个依赖后,会自动的引入该依赖的依赖,从而实现手动引入一个依赖即可自动引入多个依赖

自动配置⭐️⭐️

自动配置:
方案1:@ComponentScan注解进行组件扫描指定扫描的包

方案2:@import导入


原理
启动类注解@SpringBootApplication
当启动一个 Spring Boot 应用时,入口类上的 @SpringBootApplication 注解是关键。这个注解实际上是三个注解的组合:
-
@SpringBootConfiguration: 相当于@Configuration,声明这是一个配置类。 -
@EnableAutoConfiguration: 这是实现自动配置的核心注解。 -
@ComponentScan: 启用组件扫描,找到你编写的 Bean。

@EnableAutoConfiguration注解(核心注解)
@EnableAutoConfiguration 负责启用 Spring Boot 的自动配置机制。它的工作原理是:
2.1. 查找自动配置类位置
@EnableAutoConfiguration 通过 @Import(AutoConfigurationImportSelector.class) 引入了 AutoConfigurationImportSelector 类。
2.2. 加载配置类列表
AutoConfigurationImportSelector 的核心任务是:
-
查找所有 JAR 包中的
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件(在 Spring Boot 2.7.x 及更高版本中,早期版本是META-INF/spring.factories)。 -
这些文件里,以键值对的形式列出了所有可用的自动配置类(例如
RedisAutoConfiguration,WebMvcAutoConfiguration等)。
2.3. 筛选和排除配置类
加载到所有配置类列表后,Spring Boot 会进行筛选,决定哪些类应该被加载:
-
@Conditional注解家族是筛选的关键。

@Conditional条件装配注解(核心机制)
| 注解 | 描述 | 示例 |
@ConditionalOnClass | 当 Classpath 中存在指定的类时,配置类生效。 | 如果检测到 Jedis 类,则 RedisAutoConfiguration 生效。 |
@ConditionalOnMissingClass | 当 Classpath 中不存在指定的类时,配置类生效。 | |
@ConditionalOnBean | 当 Spring 容器中存在指定的 Bean 时,配置类生效。 | |
@ConditionalOnMissingBean | 当 Spring 容器中不存在指定的 Bean 时,配置类生效。 | 这用于确保如果你自己定义了 Bean,自动配置就会退避("用户优先" 原则)。 |
@ConditionalOnProperty | 当指定的配置属性(如 application.properties 中的键值对)满足特定条件时,配置类生效。 | 只有配置了 spring.data.redis.host 时,RedisAutoConfiguration 才完全启用。 |
@ConditionalOnWebApplication | 仅在这是一个 Web 应用 (有 ServletContext 或 ReactiveType 环境) 时生效。 |


自动配置类的作用
每一个自动配置类(例如 DataSourceAutoConfiguration)本身也是一个 @Configuration 配置类。
-
在这个配置类内部,它会定义并配置应用程序所需的 Bean(例如
DataSourceBean,JdbcTemplateBean,RedisTemplateBean 等)。 -
这些 Bean 的创建和配置往往依赖于
@ConditionalOnMissingBean,以确保用户自定义的 Bean 具有最高的优先级。
总结流程
-
启动:
@SpringBootApplication启用。 -
触发: 其中的
@EnableAutoConfiguration引导自动配置过程。 -
加载:
AutoConfigurationImportSelector扫描所有 JAR 包中的META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件,获取所有可能的自动配置类列表。 -
筛选: 对列表中的每一个自动配置类,利用
@Conditional注解家族进行条件判断(如检查 Classpath 中是否有对应的依赖、配置属性是否设置等)。 -
配置: 条件成立的自动配置类被加载到 Spring 容器中,它们负责创建并配置应用程序所需的 Bean。
自动配置starter

web后端总结
| 技术/概念 | 英文全称 | 解释 |
| SpringBoot | 🚀 快速开发框架。 它不是一个新的框架,而是 Spring 框架的脚手架和自动化配置工具。它简化了 Spring 应用的搭建、配置和部署过程,让开发者可以“开箱即用”。 | |
| IOC | Inversion of Control (控制反转) | 核心设计原则。 指对象的创建、依赖关系的管理等控制权,从应用程序代码中转移到 Spring 容器。 |
| DI | Dependency Injection (依赖注入) | IOC 的实现方式。 容器在对象创建时,自动将它依赖的其他对象(Bean)注入到其中(通过构造器、Setter 或字段)。 |
| AOP | Aspect-Oriented Programming (面向切面编程) | 解耦横切关注点。 允许开发者将系统中共用的、与核心业务无关的功能(如日志、事务、权限)从业务逻辑中分离出来,单独进行模块化管理。 |
| 事务管理 | Transaction Management | 数据一致性保证。 Spring 提供了统一的事务管理机制,确保一组数据库操作要么全部成功提交,要么全部失败回滚,保证数据的原子性和一致性。 |
| 全局异常处理 | Global Exception Handling | 统一错误响应。 通过 AOP 或特定的 Spring MVC 注解(如 @ControllerAdvice),集中处理整个应用中抛出的所有异常,并将其封装成统一、友好的 JSON 格式响应给前端。 |
| 拦截器 | Interceptor | Web 请求的前后处理。 属于 Spring MVC 机制。在请求进入 Controller 之前或返回之后执行逻辑,常用于登录校验、权限检查、请求参数预处理等。 |
| 技术/概念 | 解释 | |
| MyBatis | 🔗 流行的持久层框架。 它通过 XML 或注解方式,将 Java 对象与 SQL 语句关联起来。它避免了手动编写 JDBC 代码,允许开发者更灵活地控制 SQL 语句,实现数据访问。 |
| 技术/概念 | 关键职能 | 与拦截器的区别 |
| 过滤器 (Filter) | 请求和响应的预处理和后处理。 它们在 Servlet 容器中运行,是请求进入 Spring MVC 调度器(DispatcherServlet)之前的第一道关卡,也是响应离开之前的最后一道关卡。 | 作用范围广且底层: 作用于整个 Web 应用的 URL 模式,可以修改请求/响应头或数据流,常用于编码、CORS(跨域)处理、安全日志等。 |
| Cookie | 客户端状态存储。 服务器发送给浏览器的小段数据,浏览器下次请求时会带上。主要用于跟踪会话 ID(Session ID)、用户偏好设置或“记住我”功能。 | 限制大小(通常 4KB),安全性较低(容易被篡改)。 |
| Session | 服务器端会话管理。 基于 Cookie(或 URL 重写)中的 Session ID,服务器在内存或数据库中保存用户状态数据。 | 安全性高: 敏感数据存储在服务器端。但在分布式环境(多台服务器)中,需要额外的技术(如 Redis)来共享 Session。 |
| 技术/概念 | 核心解决的问题 | 在现代架构中的作用 |
| JWT (JSON Web Token) | 无状态认证和授权。 解决了传统 Session 在分布式部署时需要共享状态的复杂性。 | 适用于 API 和微服务: 用户登录成功后,服务器生成一个包含用户信息的 JWT 并返回给客户端。客户端在后续请求中携带此 Token,服务器只需验证 Token 签名即可确认用户身份,无需查询 Session 存储。 |
| 阿里云 OSS (Object Storage Service) | 海量非结构化数据存储和访问。 解决了应用服务器存储图片、视频、文档等文件占用大量资源且不易扩展的问题。 | 实现动静分离: 应用服务器(处理业务逻辑)不再直接存储或提供静态文件,而是将文件上传到 OSS。用户请求时,直接通过 CDN(内容分发网络)访问 OSS 上的文件,极大地减轻了应用服务器的压力和带宽消耗。 |
1697

被折叠的 条评论
为什么被折叠?



