5.9 KiB
一、Bean概念
1.1 定义
Spring bean是Spring框架在运行时管理的对象,Bean是一个由Spring IoC容器实例化、组装和管理的对象。
一个 Bean 可以是任何普通的 Java 对象,例如 POJO、Service、Respository、Controller 等等。将一个类声明为 Bean 的方式可以是在类级别上使用 @Component 注解或其派生注解(@Service、@Repository、@Controller等),也可以是通过配置文件进行显式的声明。
1.2 实例化
Spring 容器负责实例化 Bean。当应用程序启动时,Spring 容器会根据配置信息或注解扫描的结果,找到并实例化所有被标记为 Bean 的类,并将它们加入容器中。实例化的过程由 Spring 的 IoC 容器负责。
1.3 管理
一旦 Bean 被实例化,Spring 容器将负责管理 Bean 的生命周期和依赖关系。它会根据配置文件或注解的信息,自动解决 Bean 之间的依赖关系,确保在需要的时候正确的注入依赖。Spring 容器还会负责销毁不再需要的 Bean。
1.4 依赖注入
依赖注入是 Spring 框架的一个重要特性,它允许通过自动或显式配置的方式将 Bean 的依赖项注入到其它 Bean 中。依赖注入可以通过构造函数注入、Setter 方法注入或字段注入的方式实现,其中最常见的是使用 @Autowired注解进行注入。
1.5 作用域
Spring 框架提供了多种作用域(scope)来管理 Bean 的生命周期。常见的作用域包括单例(Singleton)、原型(Prototype)、会话(Session)、请求(Request)等。默认情况下,Bean 是单例的,即每个容器中只存在一个实例。但可以根据需要配置其它作用域。
1.6 自动装配
Spring Boot 支持自动装配(Auto - wiring),它能够根据类型或名称自动解析和注入依赖关系。通过在需要注入的字段、构造函数或 Setter 方法上使用 @Autowired 注解,Spring 容器会自动查找并注入对应的 Bean。
二、Bean生命周期
2.1 实例化
指创建对象的过程,也就是说,当 Spring 容器启动时,它会扫描所有的配置文件,读取 Bean 定义,然后根据定义创建 Bean 对象的实例。这个过程中,Spring 容器会使用反射机制来调用 Bean 的构造函数来实例化对象。
2.2 属性赋值
对 Bean 的实例化对象进行属性填充;
2.3 初始化
指 Bean 对象被创建后,Spring 容器会根据配置文件中的定义来对其进行一系列的属性设置、依赖注入等操作,使其可以正常运行。这个过程中,Spring 容器会调用 Bean 的一些特定方法,如 set 方法、init-method 方法等来完成对象的初始化。
2.4 销毁
执行一些预定义的销毁方法;
三、Bean注解——@Component
基本概念
@Component 是 Spring 框架中的一个注解,用于将类标记为 Spring 管理的组件。当一个类被 @Component 注解修饰时,Spring 会在启动时自动扫描并将该类实例化为 Bean,放入应用程序的上下文(ApplicationContext)中,以便在其他地方可以通过依赖注入使用。
主要作用
- 组件扫描:Spring 通过组件扫描机制自动发现并注册被 @Component 注解的类。
- Bean 定义:被注解的类会被视为 Spring Bean,由 Spring 容器管理其生命周期。
- 依赖注入:其他组件可以通过注解(如 @Autowired)注入这些 Bean。
其他衍生注解
| 注解 | 所属层 | 继承关系 | 适用场景 |
|---|---|---|---|
| @Component | 通用组件 | 基础注解 | 不适合特定层的组件(如工具类、配置类) |
| @Repository | 数据访问层 (DAO) | 继承 @Component | 数据库操作类、ORM 映射类(如 JPA Repository) |
| @Service | 服务层 (Service) | 继承 @Component | 业务逻辑处理(如订单处理、用户认证) |
| @Controller | 控制层 (MVC/Web) | 继承 @Component | 处理 HTTP 请求的控制器(如 REST API、Web 页面控制器) |
| @RestController | 控制层 (REST API) | 继承 @Controller | RESTful API 接口开发 |
| 注解 | 功能描述 | Spring 自动处理特性 |
|---|---|---|
| @Component | 标记类为 Spring Bean,通过组件扫描自动注册。 无特定语义,是其他组件注解的基础。 |
- Bean 生命周期管理 - 依赖注入支持 |
| @Repository | 标记数据访问组件(如数据库操作类), 自动处理数据访问异常。 |
- 异常转换 - DAO 组件扫描 |
| @Service | 标记业务逻辑组件,负责处理业务流程、事务管理等。 提供语义化,明确该类在架构中的角色。 |
- 与 @Transactional 注解默认集成 - IDE 识别为服务层组件 |
| @Controller | 标记 Web 控制器,处理 HTTP 请求。 与 Spring MVC 框架紧密集成。 |
- 请求映射自动注册 - 支持 @RequestMapping、@GetMapping 等注解 - 视图解析(返回视图名称或 JSON) |
| @RestController | @Controller + @ResponseBody 的组合,专门用于 RESTful API,直接返回 JSON/XML 等数据。 | - 所有方法默认返回 JSON/XML(无需每个方法添加 @ResponseBody) |
