文章目录
1.Spring Boot 简介
Spring Boot:简化Spring应用开发,约定大于配置。
Spring Boot->J2EE一站式解决方案
Spring Boot->分布式整体解决方案
2.微服务
2014年由martin fowler提出。
微服务:架构风格(服务微化)
一个应用是一组小型服务,可以通过HTTP的方式进行互通。
每个功能元素都是一个可独立替换和独立升级的软件单元。
3.配置
-
JDK:1.7及以上
-
maven:3.3以上版本
-
IntellijIDEA
-
SpringBoot
4.Spring Boot Hello World
-
新建项目
-
导依赖
<parent> <artifactId>spring-boot-starter-parent</artifactId> <groupId>org.springframework.boot</groupId> <version>2.1.7.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.3.4.RELEASE</version> </dependency> </dependencies>
-
编写主程序,启动Spring Boot应用
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class HelloWorldMainApplication { public static void main(String[] args) { //启动spring应用 SpringApplication.run(HelloWorldMainApplication.class,args); } }
-
编写相关的Controller、Service
import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class HelloController { @ResponseBody //把"hello world"写给浏览器写给浏览器 @RequestMapping("/hello") //接收来自浏览器的hello请求 public String hello(){ return "Hello World!"; } }
-
运行主程序测试
-
简化部署
导入插件,将应用打包成可执行jar包
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.3.4.RELEASE</version> </plugin> </plugins> </build>
将生成的jar包直接拖到桌面上运行,检验可用。
- 踩坑:
解决方法:
版本不一致,在setting-Build,Execution,Deployment-Build Tools-Maven,更改Maven home directory为使用的版本,User setting file后勾选override选择对应配置文件并点击apply。
5.分析
1.pom文件
1.父项目
<parent>
<artifactId>spring-boot-starter-parent</artifactId>
<groupId>org.springframework.boot</groupId>
<version>2.1.7.RELEASE</version>
</parent>
它的父项目是
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.7.RELEASE</version>
<relativePath>../../spring-boot-dependencies</relativePath>
</parent>
负责真正管理spring boot应用里面的所有依赖版本
称 Spring Boot的版本仲裁中心,以后我们导入依赖默认不需要写版本(但是没有在dependencies里面管理的依赖依然要声明版本)
2.启动器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.3.4.RELEASE</version>
</dependency>
spring-boot-starter:
Spring Boot场景启动器;帮我们导入了web模块正常运行所依赖的组件。
Spring Boot将所有的功能场景都抽取出来,做成一个个的starters(启动器),只需要在项目里引入这些starter,相关场景的所有依赖都会导入进来,而且由Spring Boot自动进行版本控制。
2.主程序类
@SpringBootApplication
public class HelloWorldMainApplication {
public static void main(String[] args) {
//启动spring应用
SpringApplication.run(HelloWorldMainApplication.class,args);
}
}
@SpringBootApplication:Spring Boot应用,标注在某个类上说明这个类是Spring Boot的主配置类,Spring Boot就应该运行这个类的main方法来启动Spring Boot应用。
@java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE})
@java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
@java.lang.annotation.Documented
@java.lang.annotation.Inherited
@org.springframework.boot.SpringBootConfiguration
@org.springframework.boot.autoconfigure.EnableAutoConfiguration
@org.springframework.context.annotation.ComponentScan(excludeFilters = {@org.springframework.context.annotation.ComponentScan.Filter(type = org.springframework.context.annotation.FilterType.CUSTOM, classes = {org.springframework.boot.context.TypeExcludeFilter.class}), @org.springframework.context.annotation.ComponentScan.Filter(type = org.springframework.context.annotation.FilterType.CUSTOM, classes = {org.springframework.boot.autoconfigure.AutoConfigurationExcludeFilter.class})})
public @interface SpringBootApplication {
@SpringBootConfiguration:Spring Boot的配置类
@Configuration:标志配置类的注解,配置类也是组件(@Component)
@EnableAutoConfiguration:开启自动配置
Spring Boot自动配置。
@org.springframework.boot.autoconfigure.AutoConfigurationPackage
@org.springframework.context.annotation.Import({org.springframework.boot.autoconfigure.AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
@AutoConfigurationPackage:自动配置包
@Import({AutoConfigurationPackages.Registrar.class})
@Import 是 Spring Boot的底层注解之一,用于给容器导入一个组件,导入的组件由AutoConfigurationPackages.Registrar.class指定,
配置方法:将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包里面的所有组件扫描到spring容器。
@Import({AutoConfigurationImportSelector.class})
AutoConfigurationImportSelector:是导入组件的选择器,将所有需要导入的组件以全限定类名的方式返回,这些组件就会被添加到容器中;会给容器中导入非常多的自动配置类(XXXAutoConfiguration),即导入并配置好这个场景所需要的所有组件,免去手动编写配置注入功能组件等工作。
Spring Boot在启动的时候从类路径下的META-INF/spring.foctories中获取EnableAutoConfiguratuion指定的值,将这些值作为自动配置类导入到容器中,然后自动配置类生效。
6.使用Spring Initializer快速创建Spring Boot项目
create-Spring Initializer-命名-选择模块-向导联网创建