# 一、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生命周期 ![暂无图片](https://cxx0822.iepose.cn/rustfs/blog/b30628a6b1fa3cfd250cc5efff612a68.jpg 'Bean生命周期.jpg') ## 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)中,以便在其他地方可以通过依赖注入使用。 ## 主要作用 1. 组件扫描:Spring 通过组件扫描机制自动发现并注册被 @Component 注解的类。 2. Bean 定义:被注解的类会被视为 Spring Bean,由 Spring 容器管理其生命周期。 3. 依赖注入:其他组件可以通过注解(如 @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) |