目录
背景
地点:长沙飞思项目十
时间:2023/10/7~10/13
大致内容:springboot、spring
前言
spring的自动配置解决了xml配置的繁琐问题,基本上是实现了“0配置”开发,但为什么spring可以实现自动配置,怎样实现自动配置的呢?
SpringBoot的自动配置
所谓的Spring的自动配置,就是我们很多的组件不需要我们去显示的去@Bean或者使用一些方法去声明或者配置它们,SpringBoot会自动的让它们去生效。
当我们创建一个Springboot项目时,会创建一个启动类,又要在启动类上加上一个@SpeingBootApplication,这个也是Springboot的核心注解。
进入@SpeingBootApplication,能看到@SpeingBootApplication又引用了这些注解,其中又以三个注解为重。
上面三个注解可以简单理解为
@EnableAutoConfiguration
:启用 SpringBoot 的自动配置机制@SpringBootConfiguration
:允许在上下文中注册额外的 bean 或导入其他配置类@ComponentScan
:扫描被@Component
(@Service
,@Controller
)注解的 bean,注解默认会扫描启动类所在的包下所有的类 ,可以自定义不扫描某些 bean。
所以@EnableAutoConfiguration就是我们对Springboot自动配置研究的重点。
进入@EnableAutoConfiguration,自动装配核心功能的实现实际是通过AutoConfigurantionImportSelector类来实现的。
进入AutoConfigurantionImportSelector中,发现它拓展了一个叫ImportSelector的接口,这个接口里面又有一个叫selectImports的方法,这个方法会返回一个字符串数组,如果这个字符串数组里面是一个类名的话,spring则会将其自动实例化。
而当我们想要使用到第三方的技术时,就要利用到一个名为“starter”的技术。
导入依赖(pom.xml)
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>3.1.4</version>
</dependency>
它就会去读取当前项目下的所有jar包,或者在我们的项目当中的resources下面的META-INF下面的spring下面的的一个文件org.springframework.boot.autoconfigure.AutoConfiguration.imports该文件下就是第三方start提供的一些自动配置的类名,将会被作为字符串返回出去并生效。生效之后,由于它们会加上@Condition这些注解,这@Condition就是用来配置我们当前Bean是否在某种条件下去完成实例化。
小结
利用Spring Boot自动装配功能具有以下好处:
1、简化开发:Spring Boot自动装配功能可以减少开发人员的工作量,减少重复代码的编写。在应用程序中引入所需的依赖,即可自动配置相关的Bean,无需手动编写相关的配置文件。
2、提高效率:Spring Boot自动装配功能可以让开发人员更加专注于业务逻辑的实现,从而提高开发效率。
3、减少错误:Spring Boot自动装配功能可以避免手动配置过程中的错误,减少应用程序运行中的错误。
4、保证一致性:Spring Boot自动装配功能可以保证应用程序的各个部分之间的一致性,减少不同部分之间的差异。