一、简介
1、概述
- 简化Spring应用开发的一个框架;
- 整个Spring技术栈的一个大整合;
- J2EE开发的一站式解决方案
2、优点
- 快速的创建独立运行的Spring项目以及与主流框架集成;
- 使用嵌入式的Servlet容器,应用无需打成war包;
- starters( 启动器)自动依赖与版本控制;
- 大量的自动配置,简化开发,也可以修改默认值;
- 无需配置xml,无代码生成,开箱即用;
- 准生产环境的运行时应用监控;
- 与云计算的天然集成;
3、微服务
- 微服务:架构风格(服务微化)
- 一个应用应该是一组小型服务,可以通过HTTP的方式进行互通;
- 单体应用:ALLIN ONE,所有的东西都写在一个应用程序里面;
- 单体应用优点:开发、测试、扩展简单;
- 微服务:每一个功能元素最终都是一个可以独立替换和独立升级的软件单元;
4、Spring Boot的项目创建
-
创建一个maven工程(jar)
-
导入spring boot相关的依赖
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.2.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
-
编写一个主程序,启动Spring Boot应用
注:Application启动类要放在最外侧,即包含所有子包,或者controller包中
/** * @SpringBootApplication来标注一个主程序类,说明这是一个Spring Boot应用 */ @SpringBootApplication public class HelloWorldMainApplication { public static void main(String[] args) { //启动spring应用,两个参数,主程序类的.class和main中的可变参数 SpringApplication.run(HelloWorldMainApplication.class,args); } }
-
编写相关的Controller、Service
/** * @RestController是@ResponseBody和@Controller的结合 * @ResponseBody告诉控制器这个类的所有方法返回的数据被自动序列化成JSON格式,并且传回HttpResponse这 * 个对象。 */ @RestController public class HelloWorldController { @RequestMapping("/hello") public String hello(){ return "hello world"; } }
-
运行主程序的main方法测试
-
简化部署,maven projects—>Lifecycle—>package
运行打包后的jar:cmd进入jar所在的目录—>java -jar 打包的包名—>回车运行即可
<!--可以将应用打包成一个可执行的jar包--> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
6、分析Spring Boot
-
pom文件
<!--父项目:spring-boot-starter-parent--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.2.RELEASE</version> </parent> <!--他的父项目是:spring-boot-dependencies是真正管理Spring Boot应用里面的所有依赖版本;--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.2.2.RELEASE</version> <relativePath>../../spring-boot-dependencies</relativePath> </parent>
spring-boot-dependencies:是Spring Boot的版本仲裁中心;
以后我们导入依赖默认是不需要写版本;(没有在dependencies里面管理的依赖自然需要声明版本号) -
启动器
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
spring-boot-starter-web:
spring-boot-starter:spring-boot场景启动器;导入了web模块正常运行的依赖组件。
注:Spring Boot将所有的功能场景都抽取出来,做成一个个的starters(启动器),只需要在项目里面引入这些starter 相关场景的所有依赖都会导入进来。要用什么功能就导入什么场景的启动器。
-
主程序类,主入口类
/** * @SpringBootApplication来标注一个主程序类,说明这是一个Spring Boot应用 */ @SpringBootApplication public class HelloWorldMainApplication { public static void main(String[] args) { //启动spring应用,两个参数,主程序类的.class和main中的可变参数 SpringApplication.run(HelloWorldMainApplication.class,args); } }
@SpringBootApplication:Spring Boot应用标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot 就应该运行这个类的main方法来启动SpringBoot应用;
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration//Spring Boot的配置类,标注在某个类上,表示这是一个Spring Boot的配置类; @EnableAutoConfiguration//开启自动配置功能,这样自动配置才能生效; @ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class), @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) }) public @interface SpringBootApplication {
7、使用IDEA的Spring Initalizer快速创建Spring Boot项目
- IDEA都支持使用Spring的项目创建向导快速创建一个Spring Boot项目。
- 点击file—>New Project—>选择Spring Initializr—点击next—>自定义Group和Artifact名,选择Packaging类型—>点击next—>选择对应的依赖Dependencies模块—>点击next—>点击finish完成创建—>删除没有用的文件(.gitignore,HELP.md,mvnw,mvnw.cmd,.mvn文件夹等)。
- 向导会联网创建Spring Boot项目。
- 默认生成的Spring Boot项目:
- 主程序已经生成好了,我们只需要我们自己的逻辑。
- resources文件夹中目录结构:
- static:保存所有的静态资源; js css images。
- templates:保存所有的模板页面。(Spring Boot默认jar包使用嵌入式的Tomcat,默认不支持JSP页 面);可以使用模板引擎(freemarker、thymeleaf)。
- application.properties:Spring Boot应用的配置文件,可以修改一些默认设置。