Springboot简介、自动装配原理

springboot是一个javaweb的开发框架,和SpringMVC类似,对比其他javaweb框架的好处:简化开发,约定大于配置,能迅速的开发web应用,几行代码开发一个http接口。

springboot-helloworld

1、使用IDEA创建一个springboot 项目

2、修改项目名称后添加web依赖

3、整理项目结构

4、在controller包下添加处理请求的程序

1
2
3
4
5
6
7
8
9
// 原理:自动装配
@RestController // 无法返回视图 相当于@Controller + @ResponseBody
public class HelloController {
// 接口 http://localhost:8080/hello
@RequestMapping("/hello")
public String doHello(){
return "Hello,world!";// 在当前页面打印字符串
}
}

整个过程非常的简单,无需像SpringMVC那样进行过多的配置,只需编写处理业务逻辑的代码,即向前端提供接口。

当然,这都源自springboot的自动装配原理。我们所编写的一个个controller不过是一个个组件,springboot已经帮我们装配好了。

在application.properties中可以修改项目的端口号

1
2
# 更改项目端口号
server.port=8081

自动装配原理

pom.xml

父项目依赖,管理项目的资源过滤及插件

1
2
3
4
5
6
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

web模块正常运行所依赖的组件:tomcat,springmvc等等

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

主启动类

1
2
3
4
5
6
7
8
// 标注这是一个springboot的应用
@SpringBootApplication
public class HelloworldApplication {

public static void main(String[] args) {
SpringApplication.run(HelloworldApplication.class, args);
}
}

SpringBoot的主配置类 , SpringBoot就应该运行这个类的main方法来启动SpringBoot应用;

Springboot的所有自动配置都是在启动的时候扫描并加载:

spring.factories:所有的配置文件都在里面,但是不一定生效,要判断条件成立,只要导入了对应的启动器,自动装配才会成功。

自动配置核心注解:

1、@SpringBootApplication;

2、@EnableAutoConfifiguration;

3、@AutoConfifigurationPackage:这个组合注解主要是@Import(AutoConfigurationPackages.Registrar.class),它通过将Registrar类导入到容器中,而Registrar类作用是扫描主配置类同级目录以及子包,并将相应的组件导入到Spring容器中;

4、@Import(AutoConfigurationImportSelector.class):它通过将AutoConfigurationImportSelector类导入到容器中,AutoConfigurationImportSelector类作用是通过selectImports方法执行的过程中,会使用内部工具类SpringFactoriesLoader,查找classpath上所有jar包中的META-INF/spring.factories进行加载,实现将配置类信息交给SpringFactory加载器进行一系列的容器创建过程。(spring.factory记录了需要加载的自动配置类的全限定名)

SpringApplication.run(HelloworldApplication.class, args);

一共做了两件事,创建SpringApplication对象,在进行初始化的时候找到spring.factories文件中配置的事件监听器并保存;调用run()方法,刚刚保存的监听器根据当前时机触发不同的事件,比如容器的初始化,容器创建完成等。同时也会刷新容器,进行组件的扫描、创建、加载等工作。