1. 想象一下你要组装一台电脑
-
传统的方式:
- 如果你要自己组装一台电脑,你需要先确定你需要哪些部件,比如主板、CPU、内存、硬盘、显卡、电源等等。然后你要去市场上一个一个买回来,回来后还要研究每个部件的说明书,看看它们怎么连接,怎么安装,最后才能把它们组装在一起。这个过程非常繁琐,而且一不小心就可能出错,还得不断地调整和测试。
-
Spring Boot 的方式:
- Spring Boot 就像一个智能的电脑组装助手。你只需要告诉它你想要一台什么样的电脑,它就会自动帮你挑选合适的部件,并把它们组装好。你可能只需要说一句:“我想要一台可以运行办公软件的电脑。”Spring Boot 就会自动挑选出合适的主板、普通的 CPU、足够的内存、大容量的硬盘和集成显卡,然后把它们组装起来,不需要你自己去挑选和组装每个部件啦 。
2. 自动装配的原理
- 启动器(Starter):
-
我们可以把 Spring Boot 的启动器看作是电脑的配置套餐。就像电脑商家会提供不同的套餐,比如 “游戏电脑套餐”、“办公电脑套餐”、“设计电脑套餐” 一样。Spring Boot 的启动器,比如
spring-boot-starter-web
或spring-boot-starter-data-jpa
,它们包含了一组预先配置好的依赖,当你添加这些启动器到你的项目中,就像你选择了一个电脑套餐。 -
例如,当你添加
spring-boot-starter-web
这个启动器时,它会自动帮你引入 Tomcat 服务器、Spring MVC 框架等一系列相关的依赖,这些依赖就像电脑套餐里的主板、CPU、内存等部件,它们已经被配置好,可以直接使用。
-
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
-
自动配置类:
-
自动配置类就像是电脑组装助手的 “组装手册”。Spring Boot 有很多自动配置类,它们会根据你项目中的依赖和环境,自动帮你配置各种组件。例如,当它看到你使用了
spring-boot-starter-web
,它会知道你可能需要一个 Web 服务器,于是它会根据默认的配置,自动配置 Tomcat 服务器,设置好服务器的端口、处理请求的方式等等。 -
想象一下,自动配置类就像一个电脑组装手册,上面写着:“如果用户添加了
spring-boot-starter-web
,就使用 Tomcat 作为服务器,端口设置为 8080,开启 Spring MVC 模式……”Spring Boot 会根据这些手册来自动完成配置。
-
-
条件装配:
-
Spring Boot 还会根据条件来决定是否装配某些组件。继续用电脑的例子,假设你添加了一个高级显卡,那么自动配置可能会根据这个条件开启游戏模式,提高显卡性能;如果没有添加高级显卡,就使用普通的显示模式。
-
在 Spring Boot 中,有一些条件注解,比如
@ConditionalOnClass
、@ConditionalOnMissingBean
等。例如,@ConditionalOnClass
会检查类路径中是否存在某个类,如果存在,就会进行相应的配置。如果你的项目中有JdbcTemplate
类,Spring Boot 可能会自动配置数据源相关的组件;如果没有,就不会配置。 -
举例说明
假设有一个
DiscountService
,你希望只有在某些条件满足时才启用这个服务。例如,只有在餐厅有促销活动时才提供折扣服务。在 Spring Boot 中,可以这样做:
-
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Service;
@Service
@ConditionalOnProperty(name = "restaurant.discount.enabled", havingValue = "true")
public class DiscountService {
// 这里是折扣服务的逻辑
public void applyDiscount() {
System.out.println("为客人提供折扣服务!");
}
}
-
这里的
@ConditionalOnProperty
注解就是一个条件。就像餐厅的经理会说:“只有当restaurant.discount.enabled
这个属性设置为true
时,才开启DiscountService
。” 这样,只有当你在application.properties
或application.yml
中添加了restaurant.discount.enabled=true
这个配置时,Spring Boot 才会创建DiscountService
的实例。
3. 如何实现自动装配
-
Spring Factories:
-
Spring Boot 在
META-INF/spring.factories
文件中记录了很多自动配置类的信息。这个文件就像一个 “部件清单”,里面列出了各种情况下需要用到的自动配置类。 -
properties 文件中的配置启用了 Spring Boot 的自动配置功能,并指定了自定义配置类。这些配置类会在应用程序启动时被加载和应用,从而实现相应的功能配置。
-
当 Spring Boot 启动时,它会读取这个文件,找到对应的自动配置类,然后根据条件决定是否启用这些配置。就像电脑组装助手查看部件清单,根据你选择的套餐和添加的部件,决定使用哪些组装手册一样。
@ComponentScan
是一个用于告诉 Spring 框架要扫描哪些包以查找组件的注解。- 当启动类使用
@SpringBootApplication
注解且没有显式添加@ComponentScan
时,Spring 会自动扫描启动类所在的包及其子包,找到并管理标记为@Component
及其派生注解的类。
-
-
依赖注入:
-
一旦组件被自动配置好,Spring Boot 会通过依赖注入将它们提供给需要的地方。这就像电脑组装好后,各个部件会通过电线、插槽等连接起来,相互协作。
-
例如,你有一个
UserService
类,Spring Boot 可以自动将UserRepository
注入进去,这样UserService
就可以使用UserRepository
进行数据库操作,而不需要你手动创建UserRepository
并连接它们。
-
4. 总结
- Spring Boot 的自动装配就像是一个智能的电脑组装助手,它通过启动器为你提供不同的配置套餐,使用自动配置类和条件装配来自动配置各种组件,最后通过依赖注入将它们连接起来,让你可以轻松地开发应用程序,而不用自己去手动配置各种繁琐的组件啦 。
这样,你就可以专注于开发应用程序的核心功能,而不是花费大量时间在配置和组装上,大大提高了开发效率,就像你只需要使用电脑,而不用关心电脑是怎么组装的一样 。
标签:装配,组装,SpringBoot,Spring,电脑,配置,Boot,自动,通俗 From: https://blog.csdn.net/2401_85943192/article/details/144764405