Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。用我的话来理解,就是 Spring Boot 其实不是什么新的框架,它默认配置了很多框架的使用方式,就像 Maven 整合了所有的 Jar 包,Spring Boot 整合了所有的框架。
以往我们采用Spring+SpringMVC+MyBatis框架进行开发的时候,搭建和整合三大框架,我们需要做很多的工作,需要配置web.xml,Spring的配置文件,SpringMVC的配置文件等。使用Spring Boot不需要配置这么多东西,只需要简单配置就可以搭建起框架。
SpringBoot的特点
SpringBoot的核心功能
1.创建一个maven工程;(jar)
2.导入SpringBoot的相关依赖;
org.springframework.boot
spring-boot-starter-parent
2.3.0.RELEASE
org.springframework.boot
spring-boot-starter-web
3.编写一个主程序,启动Spring Boot应用
/**
* @SpringBootApplication 来标注一个主程序类,说明这是一个Spring Boot应用
*/
@SpringBootApplication
public class HelloWorldMainApplication {
public static void main(String[] args) {
// Spring应用启动起来
SpringApplication.run(HelloWorldMainApplication.class,args);
}
}
4.编写相关的Controller,Service;
@Controller
public class HelloController {
@ResponseBody
@RequestMapping("/hello")
public String hello(){
return "Hello World!";
}
}
5.运行主程序测试;
6.简化部署
org.springframework.boot
spring-boot-maven-plugin
org.springframework.boot
spring-boot-starter-parent
2.3.0.RELEASE
这个的父项目是:
org.springframework.boot
spring-boot-dependencies
2.3.0.RELEASE
查看这个项目可以发现是这个项目来管理SpringBoot应用里面的所有依赖版本
Spring Boot的版本仲裁中心; 以后我们导入依赖默认是不需要写版本;(没有在dependencies里面管理的依赖自然需要声明版本号)
org.springframework.boot
spring-boot-starter-web
spring-boot-starter-web:
spring-boot-starter:spring-boot场景启动器,帮我们导入Web模块正常运行所依赖的组件。
Spring Boot将所有的功能场景都抽取出来,做成一个个的的starter(启动器),只需要项目里面引入这些starter相关的所有依赖都会导入进来。要用什么功能就导入什么场景的启动器。
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
@SpringBootApplication:SpringBoot应该标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot就应该运行这个类的main方法来启动SpringBoot应用。
点击去这个注解,查看注解@SpringBootApplication的的注解
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}
)
(1)@SpringBootConfiguration:SpringBoot的配置类,标注在某个类上,表示这是一个Spring Boot的配置类。
@Configuration
public @interface SpringBootConfiguration {
@Component
public @interface Configuration {
@Configuration配置类(相当于配置文件)上标注这个注解,配置类也是容器中的一个组件@Component。
(2)@EnableAutoConfiguration:开启自动配置功能。以前我们需要配置的东西,Spring Boot帮我们去配置;这个注解告诉Spring Boot开启自动配置功能,这样自动配置才能生效。
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
@AutoConfigurationPackage:自动配置包
点进入@AutoConfigurationPackage这个注解:
@Import({Registrar.class})
public @interface AutoConfigurationPackage {
-@Import(Register.class):Spring的底层注解@Import,给容器中导入一个组件;导入的组件是Register.class。
@Import(AutoConfigurationImportSelector.class):给容器中导入组件
AutoConfigurationImportSelector:导入哪些组件的容器。将所有需要导入的组件以全类名的方式返回,这些组件就会被添加到容器中。
会给容器中导入非常多的自动配置类(xxxAutoConfiguration),就是给容器导入这个场景需要的所有组件,并配置好这些组件。
protected List getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
List configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());
Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.");
return configurations;
}
protected Class> getSpringFactoriesLoaderFactoryClass() {
return EnableAutoConfiguration.class;
}
Spring Boot在启动的时候从类路径下的/META-INF/spring.factories中获取EnableAutoConfiguration指定的值,将这些值作为自动配置类导入容器中,自动配置类就生效,帮我们进行自动配置工作。
J2EE的整体整合解决方案和自动配置都在spring-boot-autoconfigure-2.3.0.RELEASE.jar。
IDEA都支持使用Spring的项目创建向导快速创建一个Spring Boot项目。
选择我们需要的模块,向导会联网创建Spring Boot项目。
默认生成的Spring Boot项目:
static:保存所有的静态资源,jss,cssimages。
templates:保存所有模板(spring Boot默认jar包使用嵌入式的Tomcat,默认不支持JSP页面);可以使用模板引擎(freemarker,thymeleaf)。
application.properties:Spring Boot的配置文件,可以修改一些默认配置。