目录
1、Spring Boot简介
优点
简化Spring应用开发的框架
对Spring技术栈的大整合
J2EE开发一站式解决方案
2、微服务
Martin Fowler 2014年 提出
微服务是一种架构风格,组成服务的每一个元素都是可以独立替换和独立升级的软件单元,详情可见:微服务原文、优快云译文、简书译文
3、SpringBoot的IDEA配置
3-1 约束环境
jdk 1.8以上
maven 3.3以上
IDEA 2019.2
SpringBoot 最新(2020.04)
3-2 MAVEN配置
在maven/conf/settings.xml 中配置:
<profiles>
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
</profiles>
3-3 配置IDEA使用本地maven仓库
Settings中配置使用本地maven仓库
在maven/conf/settings.xml 中配置阿里镜像maven仓库(不配置会从国外maven官网下载,速度很慢)
<mirrors>
<!-- 阿里镜像 -->
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
4、SpringBoot HelloWorld!
目标:浏览器发送hello请求,服务器接受请求并处理,响应Hello World字符串
4-1 创建maven工程
第一次创建需要配置jdk版本
4-2 创建项目
Spring Initializr方式创建项目
创建过程中,可以快捷导入依赖
IDE都支持使用Spring的项目创建向导快速创建一个Spring Boot项目;
选择我们需要的模块;向导会联网创建Spring Boot项目;
默认生成的Spring Boot项目;
创建完毕后,启用自动导入maven依赖
配置文件,此处为修改端口号
@SpringBootApplication来标注一个主程序类,说明这是一个SpringBoot应用。默认生成的Spring Boot项目;
- 主程序已经生成好了,我们只需要我们自己的逻辑
- resources文件夹中目录结构
- static:保存所有的静态资源; js css images;
- templates:保存所有的模板页面;(Spring Boot默认jar包使用嵌入式的Tomcat,默认不支持JSP页面);可以使用模板引擎(freemarker、thymeleaf);
- application.properties:Spring Boot应用的配置文件;可以修改一些默认设置;
创建controller类
@Controller
public class HelloController {
@RequestMapping("/hello")
@ResponseBody
public String test1(){
return "hello";
}
}
4-3 启动运行效果
4-4 SpringBoot打包成jar包,简化部署
刚刚创建的Springboot程序中的pom文件中,有这样一个插件
<!--这个插件将应用打包成一个可执行的jar包-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
选着package
会得到我们刚才创建程序的jar包
通过Show in Explorer找到文件,拷贝文件的路径
打开cmd窗口,进入上述路径,输入
cd C:\Users\15637\Desktop
执行jar包
java -jar xxx(名字).jar
启动成功,打开网页测试,成功
tips:jar包和war包的区别
jar包:对于学习java的人来说应该并不陌生。我们也经常使用也一些jar包。其实jar包就是java的类进行编译生成的class文件就行打包的压缩包而已。里面就是一些class文件。当我们自己使用maven写一些java程序,进行打包生成jar包。同时在可以在其他的工程下使用,但是我们在这个工程依赖的jar包,在其他工程使用该jar包也要导入。
war包:其实就是一个web程序进行打包便于部署的压缩包,里面包含我们web程序需要的一些东西,其中包括web.xml的配置文件,前端的页面文件,以及依赖的jar。文件数量对于jar包,这样便于我们部署工程,直接放到tomcat的webapps目录下,直接启动tomcat即可。同时可以使用WinRAR查看war包,直接将后缀.war改成.rar
5、HelloWorld探究
5-1 maven依赖版本仲裁
pom文件中,有这么一个父项目
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
点击spring-boot-starter-parent发现他的父项目为
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.6.RELEASE</version>
<relativePath>../../spring-boot-dependencies</relativePath>
</parent>
点击spring-boot-dependencies发现里面有所有依赖的版本,他来真正管理Spring Boot应用里面的所有依赖版本
这就是springboot中的版本仲裁中心
以后我们导入依赖默认是不需要写版本: ( 没有在dependencies里面管理的依赖自然需要声明版本号)
5-2 spring依赖启动器
在创建springboot过程中,我们导入的web依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
我们点进去,发现这个依赖是由以下几个依赖组成的
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.2.6.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-json</artifactId>
<version>2.2.6.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<version>2.2.6.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
<version>2.2.6.RELEASE</version>
<scope>compile</scope>
<exclusions>
<exclusion>
<artifactId>tomcat-embed-el</artifactId>
<groupId>org.apache.tomcat.embed</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.2.5.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.5.RELEASE</version>
<scope>compile</scope>
</dependency>
我们发现以上都是web相关的依赖,也就是只需要导入一个spring-boot-starter-web依赖,我们就可以快速构建一个web项目。
这就是springboot场景启动器,一般由spring-boot-starter + 你要的场景组成,可以快速导入,该场景所需要的相关依赖,并由版本仲裁进行版本管理
总结:
Spring Boot将所有的功能场景都抽取出来,做成一个个的starters (启动器) ,只需要在项目里面引入这些starter相关场景的所有依赖都会导入进来。要用什么功能就导入什么场景的启动器
5-3 SpringbootApplication主程序
package com.lwf;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Springboot01HelloworldApplication {
public static void main(String[] args) {
SpringApplication.run(Springboot01HelloworldApplication.class, args);
}
}
@SpringBootApplication表示这是一个SpringBoot应用。当这个注解标注在一个类上,表示这个类是SpringBoot的主配置类,要通过这个类的main方法来启动SpringBoot应用。
@SpringBootApplication的构成
我们点进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) })
public @interface SpringBootApplication {
主要由@SpringBootConfiguration和@EnableAutoConfiguration构成
@SpringBootConfiguration:SpringBoot配置类
标注在某个类上,表示这个类是一个SpringBoot配置类,我们继续点击,发现父类是一个@Configuration,@Configuration用于配置类上进行标注,等同于以前的配置文件。再进行点击,发现@Configuration是一个@Component,是个组件,说明配置类也是容器中的一个组件。
@EnableAutoConfiguration构成:开启自动配置功能
以前需要我们进行配置的东西,通过这个注解,可以让Spring Boot帮我们自动配置。点击进入@EnableAutoConfiguration构成,有两个注解:
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
@AutoConfigurationPackage:自动配置包。点进去,发现有个
@Import(AutoConfigurationPackages.Registrar.class)注解,@Import是Spring的底层注解,表示在Spring中导入一个组件,导入的组件由AutoConfigurationPackages.Registrar.class决定。
点进Registrar类,发现他的作用如下:
将主配置类( @SpringBootApplication标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器;
@Import(AutoConfigurationImportSelector.class)
@Import:导入组件
AutoConfigurationImportSelector:自动配置导包选择器。
会给容器中导,入非常多的自动配置类( xxxAutoConfiguration) ; 就是给容器中导入这个场景需要的所有组件,并配置好这些组件;
Spring Boot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值,将这些值作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置工作;
以前需要我们手动配置的东西,都由他帮我们自动配置了
J2EE整体整合和自动配置都在:spring-boot-autoconfigure-2.2.6.RELEASE.jar
结论:springboot所有 自动配置都是在启动的时候扫描并加载: spring. factories所有的自动配置类都在这里
面,但是不-定生效,要判断条件是否成立,只要导入了对应的starter,就有对应的启动器了,有了启动器,我们
自动装配就会生效,然后就配置成功!
- springboot在启动的时候,从类路径下/META-INF/ spring . factories获取指定的值;
2.将这些自动配置的类导入容器,自动配置就会生效,帮我进行自动配置!
3.以前我们需要自动配置的东西,现在springboot帮我们做了!
4.整合javaEE,解决方案和自动配置的东西都在spring boot-autoconfigure-2.2.0.RELEASE.jar这个包下
5.它会把所有需要导入的组件,以类名的方式返回,这些组件就会被添加到容器;
6.容器中也会存在非常多的xxAutoConfiguration的文件(@Bean),就是这些类给容器中导入了这个场景需要的所有组件;并自动配置,@Configuration ,JavaConfig!
7.有了自动配置类,免去了我们手动编写配置文件的工作!
6、创建Spring Boot项目
6-1 使用Spring Initializer快速创建Spring Boot项目
同4-1和4-2
6-2 测试
编写Controller类
@Controller
public class HelloController {
@RequestMapping("/hello")
//@RequestMapping("/hello"):接收来自浏览器的/hello请求
@ResponseBody
// @ResponseBody返回给浏览器 String 值
public String test1(){
return "hello Springboot";
}
}
@ResponseBody注解表示,发挥给浏览器一个字符串,将它加在某个方法上,则只对该方法生效,将他加在某个类上,则对该类下所有方法生效。
即:
@ResponseBody
@Controller
public class HelloController {
为了简便,还可以将两个注解融合为一个:@RestController
点进@RestController,发现它就是由@ResponseBody和
@Controller构成
运行Springboot01HelloworldApplication类的主方法,访问http://localhost:8088/hello,返回值为: