SpringBoot起步依赖和自动配置

繁琐的Spring

Spring是目前世界上最流行的Java框架,直接基于Spring框架进行Web项目的开发,会比较繁琐。 繁琐主要体现在两个地方:

  1. pom.xml中依赖配置比较繁琐,需要自己去找到对应的依赖以及进行版本管理,否则就会出现版本冲突问题。
  2. 项目开发时,需要在Spring的配置文件中做大量的配置,这就造成入门难度较大,学习成本较高

简单的Spring Boot

因为Spring存在这些问题,官方在Spring4.0版本后,推出了一个全新的框架:SpringBoot 通过 SpringBoot来简化Spring框架的开发(是简化不是替代)。我们直接基于SpringBoot来构建Java项目,会让我们的项目开发更加简单,更加快捷。让我们能够集中精力关注业务功能的开发

SpringBoot框架之所以使用起来更简单更快捷,是因为SpringBoot框架底层提供了两个非常重要的功能:

  1. 起步依赖
  2. 自动配置

起步依赖

如果使用Spring框架进行web程序的开发,此时我们就需要手动引入web程 序开发所需要的一些依赖。包括

  • spring-webmvc依赖:这是Spring框架进行web程序开发所需要的依赖
  • servlet-api依赖:Servlet基础依赖
  • jackson-databind依赖:JSON处理工具包
  • 如果要使用AOP,还需要引入aop依赖、aspect依赖

需要自己保证版本匹配,否则就可能会出现版本冲突问题 而使用SpringBoot后, 只需要web开发的起步依赖:springboot-starter-web

其他的依赖如json、web、webmvc、tomcat自动的通过Maven依赖传递引入到项目, 并且能统一进行版本管理,再也不会版本冲突了, 非常方便快捷

起步依赖清单

SpringBoot完整的起步依赖清单如下图所示,包含名称、作用的依赖库

自动配置

当Spring容器启动后,配置类、bean对象自动存入IOC容器中,不需要我们手动去声明,从而简化了开发,省去了繁琐的配置操作。

打开idea,看下自动配置的效果

运行SpringBoot项目

有两个CommonConfig,在第一个CommonConfig类中定义了一个bean对象,bean对象的名字叫reader。

第二个CommonConfig的bean名字叫commonConfig

怎么生成这样一个IOC bean对象呢?

在CommonConfig配置类上添加了一个注解@Configuration,而@Configuration底层就是@Component

所以配置类变成SpringIOC容器当中的一个bean对象

在IOC容器中除了自定义bean,还有很多配置类,这些配置类都会在SpringBoot启动的时候加载进来, 并生成很多的bean对象。

比如:配置类GsonAutoConfiguration里面有一个bean叫gson, 类型为com.google.gson.Gson, 是谷歌提供的用来处理JSON格式数据的工具类。

如何使用这些配置类中生成的bean对象呢

使用@Autowired就自动注入了:

typescript 复制代码
import com.google.gson.Gson;
import com.itheima.pojo.Result;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class AutoConfigurationTests {
    @Autowired
    private Gson gson;
    
    @Test
    public void testJson(){
        String json = gson.toJson(Result.success());
        System.out.println(json);
    }
}

添加断点,使用debug模式运行测试类程序:

可以看到, Gson对象自动注入到我们自定义的json bean变量中

SpringBoot项目在启动时将依赖jar包当中所定义的配置类以及bean加载到SpringIOC容器中的, 并通过自动配置完成了bean对象的创建

相关推荐
李慕婉学姐3 小时前
【开题答辩过程】以《基于JAVA的校园即时配送系统的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·开发语言·数据库
奋进的芋圆5 小时前
Java 延时任务实现方案详解(适用于 Spring Boot 3)
java·spring boot·redis·rabbitmq
sxlishaobin5 小时前
设计模式之桥接模式
java·设计模式·桥接模式
model20055 小时前
alibaba linux3 系统盘网站迁移数据盘
java·服务器·前端
荒诞硬汉5 小时前
JavaBean相关补充
java·开发语言
提笔忘字的帝国5 小时前
【教程】macOS 如何完全卸载 Java 开发环境
java·开发语言·macos
2501_941882486 小时前
从灰度发布到流量切分的互联网工程语法控制与多语言实现实践思路随笔分享
java·开发语言
華勳全栈6 小时前
两天开发完成智能体平台
java·spring·go
alonewolf_996 小时前
Spring MVC重点功能底层源码深度解析
java·spring·mvc
沛沛老爹6 小时前
Java泛型擦除:原理、实践与应对策略
java·开发语言·人工智能·企业开发·发展趋势·技术原理