SpringBoot 的自动装配特性

1. Spring Boot 的自动装配特性

Spring Boot 的自动装配(Auto-Configuration)是一种特性,它允许您在应用程序中使用默认配置来自动配置 Spring Framework 的各种功能和组件,从而减少了繁琐的配置工作。通过自动装配,您可以更快速地搭建和开发应用程序,同时还可以通过覆盖默认配置来适应特定的需求。

自动装配的核心思想是根据应用程序的依赖和配置来自动配置 Spring Bean,以及提供一些默认的行为,从而实现最佳实践和约定优于配置的原则。以下是一些关键概念和使用方式:

  1. 启动器(Starters) :Spring Boot 启动器是预定义依赖集合,用于简化特定类型应用的开发。启动器通常包括所需的库、框架和配置,让您可以更轻松地开始开发特定类型的应用,例如 spring-boot-starter-web 用于构建 Web 应用。
  2. 自动配置类 :Spring Boot 提供了许多自动配置类,这些类会根据应用程序的依赖和配置自动创建 Spring Bean。例如,DataSourceAutoConfiguration 会根据配置自动创建数据库数据源 Bean。
  3. 条件化装配 :Spring Boot 使用条件化装配来决定是否应该自动配置特定的 Bean。可以使用 @ConditionalOn... 注解来定义条件,如 @ConditionalOnClass@ConditionalOnProperty 等。
  4. 自定义配置 :如果默认的自动配置不符合您的需求,您可以通过在应用程序中提供自定义的配置来覆盖或扩展默认行为。通过创建 @Configuration 类并定义 Bean,可以完全控制 Bean 的创建和配置。
  5. 禁用自动配置 :如果您不希望使用某些自动配置,可以使用 @EnableAutoConfiguration 注解的 exclude 属性或在 application.properties 文件中使用属性来禁用它们。
  6. 自定义启动器:如果您要构建和共享自己的自动配置和依赖集合,可以创建自定义的 Spring Boot 启动器,让其他开发者可以更方便地使用您的功能。

Spring Boot 的自动装配大大简化了项目的配置和开发流程,但需要注意在某些情况下需要额外的配置或修改来满足特定的需求。您可以根据应用程序的需求灵活使用自动装配和自定义配置。

2. 以web开发为例

xml 复制代码
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

</dependencies>

2.1 自动配好Tomcat

引入Tomcat依赖。启动配置Tomcat

xml 复制代码
<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

xml 复制代码
<dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.1.7.RELEASE</version>
      <scope>compile</scope>
</dependency>

2.3 自动配好Web常见功能

SpringBoot帮我们配置好了所有web开发的常见场景,如:字符编码问题

xml 复制代码
<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 指定扫描路径
java 复制代码
@SpringBootApplication
等同于
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan("com.atguigu.boot")

2.5 各种配置拥有默认值

  • 所谓自动装配就是初始化各种bean(依据场景启动器start创建),加入IOC容器。
  • 默认配置最终都是映射到某个类上,这个类会在容器中创建对象。如:MultipartProperties
  • SpringBoot所有的自动配置功能都在 spring-boot-autoconfigure 包里面

查看容器中的组件:

java 复制代码
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);
        }

    }
}
相关推荐
Java面试题总结几秒前
使用 Python 在 Excel 中添加和自定义文本框
开发语言·python·excel
我登哥MVP5 分钟前
走进 Gang of Four 设计模式:解释器模式
java·设计模式·解释器模式
智码看视界7 分钟前
Tomcat架构深度拆解:Connector和Container到底怎么配合的?
java·servlet·架构·tomcat·web服务器
浪客川7 分钟前
idea 技巧 region 的使用
java·ide·intellij-idea
杨运交10 分钟前
[049][Crypto模块]前后端混合加密API实战:基于Spring Boot的AES+RSA安全传输方案
spring boot·后端·安全
geovindu13 分钟前
CSharp: Recursion Algorithm
开发语言·后端·算法·c#·递归算法
dsyyyyy110117 分钟前
用JavaScript实现排序算法
开发语言·javascript·排序算法
William Dawson20 分钟前
【国产化改造实战|Spring Boot对接华为云MRS Redis Kerberos认证终极踩坑指南】
spring boot·redis·华为云
CHANG_THE_WORLD28 分钟前
逐层拆解:C++ 虚函数从对象内存到手工调用的完整过程
java·开发语言·c++
我登哥MVP29 分钟前
走进 Gang of Four 设计模式:过滤器模式
java·设计模式·过滤器模式