1. Spring Boot 的自动装配特性
Spring Boot 的自动装配(Auto-Configuration)是一种特性,它允许您在应用程序中使用默认配置来自动配置 Spring Framework 的各种功能和组件,从而减少了繁琐的配置工作。通过自动装配,您可以更快速地搭建和开发应用程序,同时还可以通过覆盖默认配置来适应特定的需求。
自动装配的核心思想是根据应用程序的依赖和配置来自动配置 Spring Bean,以及提供一些默认的行为,从而实现最佳实践和约定优于配置的原则。以下是一些关键概念和使用方式:
- 启动器(Starters):Spring Boot 启动器是预定义依赖集合,用于简化特定类型应用的开发。启动器通常包括所需的库、框架和配置,让您可以更轻松地开始开发特定类型的应用,例如
spring-boot-starter-web
用于构建 Web 应用。 - 自动配置类:Spring Boot 提供了许多自动配置类,这些类会根据应用程序的依赖和配置自动创建 Spring Bean。例如,
DataSourceAutoConfiguration
会根据配置自动创建数据库数据源 Bean。 - 条件化装配:Spring Boot 使用条件化装配来决定是否应该自动配置特定的 Bean。可以使用
@ConditionalOn...
注解来定义条件,如@ConditionalOnClass
、@ConditionalOnProperty
等。 - 自定义配置:如果默认的自动配置不符合您的需求,您可以通过在应用程序中提供自定义的配置来覆盖或扩展默认行为。通过创建
@Configuration
类并定义 Bean,可以完全控制 Bean 的创建和配置。 - 禁用自动配置:如果您不希望使用某些自动配置,可以使用
@EnableAutoConfiguration
注解的exclude
属性或在application.properties
文件中使用属性来禁用它们。 - 自定义启动器:如果您要构建和共享自己的自动配置和依赖集合,可以创建自定义的 Spring Boot 启动器,让其他开发者可以更方便地使用您的功能。
Spring Boot 的自动装配大大简化了项目的配置和开发流程,但需要注意在某些情况下需要额外的配置或修改来满足特定的需求。您可以根据应用程序的需求灵活使用自动装配和自定义配置。
2. 以web开发为例
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
2.1 自动配好Tomcat
引入Tomcat依赖。启动配置Tomcat
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<version>2.1.5.RELEASE</version>
<scope>compile</scope>
</dependency>
2.2 自动配好SpringMVC
自动配好SpringMVC常用组件(功能)例如:dispatcherServlet
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.7.RELEASE</version>
<scope>compile</scope>
</dependency>
2.3 自动配好Web常见功能
SpringBoot帮我们配置好了所有web开发的常见场景,如:字符编码问题
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.1.7.RELEASE</version>
<scope>compile</scope>
</dependency>
2.4 默认的包结构
- 主程序所在包及其下面的所有子包里面的组件都会被默认扫描进来
- 想要改变扫描路径,
@SpringBootApplication(scanBasePackages="com.atguigu")
或者@ComponentScan
指定扫描路径
@SpringBootApplication
等同于
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan("com.atguigu.boot")
2.5 各种配置拥有默认值
- 所谓自动装配就是初始化各种bean(依据场景启动器start创建),加入IOC容器。
- 默认配置最终都是映射到某个类上,这个类会在容器中创建对象。如:MultipartProperties
- SpringBoot所有的自动配置功能都在 spring-boot-autoconfigure 包里面
查看容器中的组件:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import tk.mybatis.spring.annotation.MapperScan;
@MapperScan(basePackages = "com.XXX.mapper")
@SpringBootApplication
public class BootStrapApplication {
public static void main(String[] args) {
try {
/**
* 返回IOC容器
*/
ConfigurableApplicationContext applicationContext = SpringApplication.run(BootStrapApplication.class, args);
/**
* 查看容器中所有组件
*/
String[] beanDefinitionNames = applicationContext.getBeanDefinitionNames();
for (String beanDefinitionName : beanDefinitionNames) {
System.out.println(beanDefinitionName);
}
} catch (Exception e){
e.printStackTrace();
System.exit(-1);
}
}
}