Bean的介绍
Spring Boot 是一个基于 Spring 框架的项目,它简化了基于 Spring 的应用开发,提供了一系列的“约定大于配置”的特性。在 Spring Boot 中,
Bean
是由 Spring 容器管理的对象,它们是构成应用程序的主体。以下是 Spring Boot 中 Bean 的一些核心概念:
Bean 的定义:
- 在 Spring 框架中,Bean 是那些组成应用程序的主要组件,它们由 Spring 容器实例化、配置和管理。Bean 是通过 Spring 框架的 IoC(控制反转)容器进行管理的对象。
Bean 的作用域:
- Singleton:默认作用域,每个 Spring IoC 容器中只会创建一个 Bean 实例。
- Prototype:每次请求都会创建一个新的 Bean 实例。
- Request:每个 HTTP 请求都会创建一个新的 Bean,仅适用于 Web 应用程序。
- Session:在一个 HTTP Session 中,一个 Bean 定义对应一个实例。
- Application:在ServletContext的生命周期内,一个 Bean 定义对应一个实例,仅适用于 Web 应用程序。
- WebSocket:在 WebSocket 握手请求中,一个 Bean 定义对应一个实例。
Bean 的生命周期:
- 实例化:Spring 容器使用 Bean 的构造函数或工厂方法创建 Bean 实例。
- 属性赋值:Spring 容器为 Bean 设置属性,这些属性可能是其他 Bean 的引用。
- BeanNameAware、BeanFactoryAware:如果 Bean 实现了这些接口,Spring 容器会调用它们的相应方法。
- InitializingBean:如果 Bean 实现了 InitializingBean 接口,Spring 容器会调用 afterPropertiesSet() 方法。
- init-method:如果 Bean 定义了 init-method 属性,Spring 容器会调用该方法。
- 使用 Bean:完成上述步骤后,Bean 就准备好被应用程序使用了。
- DisposableBean:当 Bean 不再需要时,如果 Bean 实现了 DisposableBean 接口,Spring 容器会调用其 destroy() 方法。
- destroy-method:如果 Bean 定义了 destroy-method 属性,Spring 容器会调用该方法。
Bean 的配置:
- Bean 可以通过 XML 配置文件、注解(如
@Component
、@Service
、@Repository
、@Controller
)或 Java 配置类来声明。- 在 Spring Boot 中,通常使用注解方式来声明 Bean,因为这种方式更简洁。
自动装配(Autowiring):
- Spring 容器可以自动装配 Bean 之间的依赖关系,这是通过注解(如
@Autowired
)或 XML 配置来实现的。Bean 的作用:
- Bean 是实现业务逻辑的核心,它们可以是服务、数据访问对象(DAO)、控制器(Controller)等。
在 Spring Boot 应用中,Bean 的管理是自动的,开发者只需要关注业务逻辑的实现,而不需要关心对象的创建和管理。这种机制极大地简化了开发过程,提高了开发效率。
比喻版
想象一下,你正在经营一家餐厅,这家餐厅就像是一个 Spring Boot 应用。在餐厅中,你需要各种各样的角色来保证餐厅的正常运转:
Bean 的定义:
- 每个角色(服务员、厨师、收银员等)都可以看作是一个 Bean。他们都是餐厅运作的重要组成部分,每个角色都有特定的职责。
Bean 的作用域:
- Singleton:就像餐厅的经理,无论有多少顾客,都只有一个经理负责整个餐厅的运营。
- Prototype:每一批新来的顾客可能需要一个新的菜单(Prototype Bean),用完就丢弃。
- Request:每个顾客的点餐请求(Request Bean)都是独一无二的,每个请求都需要特别的关注。
Bean 的生命周期:
- 就像餐厅员工的一天,从他们到达餐厅(实例化),穿上制服(属性赋值),到开始工作(初始化),最后下班离开(销毁)。
Bean 的配置:
- 就像餐厅的招聘广告,你可以在报纸上发布(XML 配置),或者在门口贴一个招聘启事(注解),甚至是通过口碑相传(Java 配置类)。
自动装配(Autowiring):
- 就像餐厅的新员工,他们不需要自己去找其他部门的同事合作,餐厅经理(Spring 容器)会自动安排他们与其他员工(Bean)的合作。
Bean 的作用:
- 每个员工(Bean)都有自己的工作,他们共同确保餐厅的顺利运营。服务员负责接待顾客,厨师负责烹饪,收银员负责结账。
在这个餐厅比喻中,Spring Boot 就像是一个高效的餐厅管理系统,它确保每个角色都能在正确的时间、正确的地点做正确的事情,而不需要你亲自去管理每一个细节。这样,你就可以专注于提供更好的服务和食物,而不是被日常的管理琐事所困扰。
Bean的扫描
在spring中,需要添加以下注解,给具体的路径才能扫描到bean
但springboot却不用指定路径,为什么?
因为SpringBootApplication本质上是一个组合注解,里面包含@ComponentScan,如果不写具体扫描路径,就会扫描当前类所在包,及其所有子包。
扫描范围如下。如果在com.example.test 05包外,启动类就扫描不到了(但一般也没人这么写)
Bean注册
涉及到第三方bean注册,感觉暂时用不到,先不学了