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);
        }

    }
}
相关推荐
代码中介商几秒前
C语言函数完全指南:从基础到实践
c语言·开发语言
思茂信息14 分钟前
CST交叉cable的串扰(crosstalk)仿真
服务器·开发语言·人工智能·php·cst
lolo大魔王20 分钟前
Go语言的反射机制
开发语言·后端·算法·golang
那个失眠的夜34 分钟前
AspectJ
java·开发语言·数据库·spring
杨凯凡40 分钟前
【014】基本类型与包装类:缓存、相等性、NPE
java·数据结构·缓存
网域小星球1 小时前
C++ 从 0 入门(四)|继承、多态、this 指针、深浅拷贝(C++ 面试终极收官)
开发语言·c++·面试·多态·继承·this指针·深浅拷贝
MateCloud微服务1 小时前
懂你所需,利爪随行:MateClaw 正式开源,补齐 Java 生态的 AI Agent 拼图
spring boot·aigc·javaagent·aiagent·openclaw·mateclaw·javaclaw
emmjng3691 小时前
使用飞算JavaAI实现在线图书借阅平台
java
CoderYanger1 小时前
14届蓝桥杯省赛Java A 组Q1~Q3
java·开发语言·线性代数·算法·职场和发展·蓝桥杯
钮钴禄·爱因斯晨1 小时前
他到底喜欢我吗?赛博塔罗Java+前端实现,一键解答!
java·开发语言·前端·javascript·css·html