SpringBoot粗浅分析

应用分析

1、依赖管理机制

在springBoot项目中,导入starter-web所有想换依赖都会被导入,甚至不用去规定它们的版本号。它是根据Maven的依赖传递原则来设置,只需要导入场景启动器,场景启动器自动把这个场景的所有核心依赖全部导入。不去规定版本号的原因是:每个springBoot都有一个父项目spring-boot-starter-parent,parent的父项目spring-boot-dependencies在其中声明了所有常见的jar包的依赖版本,如果想要自定义版本号,我们可以利用maven的就近原则,直接在当前项目添加properties标签,在其中声明父项目版本属性的key,或直接在依赖内添加version标签。

2、自动配置机制(初步理解)

①自动配置Tomcat、SpringMVC等

导入场景,容器中就会自动配置好这个场景的核心组件。

  • 以前:DispatcherServlet、ViewResolver、CharacterEncodingFilter…
  • 现在:自动配置完整

查看容器中有什么组件。

package com.louis;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Boot302Application {

	public static void main(String[] args) {
		//java10:局部变量类型的自动推断
		var ioc = SpringApplication.run(Boot302Application.class, args);
		//1、获取容器中所有组件的名字
		String[] names = ioc.getBeanDefinitionNames();
		//2、遍历数组内容
		for (String name : names) {
			System.out.println(name);
		}
	}
}

SpringBoot粗浅分析_第1张图片

②默认的包扫描规则

SpringBoot只会扫描主程序所在的包及其下面的子包,自动的component-scan功能。也可以自定义扫描路径:

  • 法一:设置@SpringBootApplication的scanBasePackage属性设置,如:

    @SpringBootApplication(scanBasePackages = "com")
    
  • 法二:观察@SpringBootApplication注解发现它是一个复合注解,可以使用@ComponentScan("com")注解设置扫描路径。

SpringBoot粗浅分析_第2张图片

③配置默认值

配置文件的所有配置项是和某个类的对象值进行一一绑定的。

绑定了配置文件中每一项的类就叫做配置属性类。如:ServerProperties绑定了所有Tomcat服务器有关的配置、MultipartProperties绑定了所有与文件上传相关的配置…

④按需加载自动配置

场景启动器除了会导入相关功能依赖外,还会导入spring-boot-starter,它是基础核心starter,是所有starter的starter,在其中又导入了一个包spring-boot-autoconfigure里面都是各种场景的autoconfigure自动配置类,用来实现自动配置,虽然都在这个包中,但并不是全部都开启的。只有在导入了相关场景时才会开启相关自动配置。

总结:导入场景启动器,触发apring-boot-autoconfigure这个包的自动配置生效,容器中就会具有相关场景的功能。

你可能感兴趣的:(SpringBoot3,spring,boot,后端,java)