一、Spring Boot简介
1、Spring Boot是什么
Spring Boot 是一个轻量级框架,可以完成基于 Spring 的应用程序的大部分配置工作。
Spring Boot 简化了基于Spring的应用开发,通过少量的代码就能创建一个独立的、产品级别的Spring应用。 Spring Boot为Spring平台及第三方库提供开箱即用的设置,这样你就可以有条不紊地开始。多数Spring Boot应用只需要很少的Spring配置。
你可以使用Spring Boot创建Java应用,并使用 java -jar启动它或采用传统的war部署方式。同时 Spring Boot 也提供了一个运行“spring 脚本”的命令行工具。
Spring Boot 主要的目标是:
- 为所有Spring开发提供一个更快更广泛的入门体验;
- 开箱即用,不合适时也可以快速抛弃;
- 提供一系列大型项目常用的非功能性特征,比如:嵌入式服务器、安全性、度量、运行状况检查、外部化配置等;
- 零配置(无冗余代码生成和XML强制配置 ,遵循“约定大于配置”);
简言之,抛弃了传统JavaEE项目繁琐的配置、学习过程,让开发过程变得 so easy!
2、Spring Boot不是什么
与 Spring 框架的关系
Spring 框架的关系通过 IOC 机制来管理bean。Spring Boot 依赖 Spring 框架来管理对象的依赖。 Spring Boot并不是Spring的精简版本,而是为使用Spring做好各种产品级准备。
与 SpringMVC 框架的关系
SpringMVC 实现了 Web项目中的 MVC模式。如果Spring Boot是一个 Web项目的话,可以选择采用 SpringMVC 来实现 MVC模式。当然也可以选择其他类似的框架。
与 Spring Cloud 框架的关系
Spring Cloud 框架可以实现一整套分布式系统的解决方案(当然其中也包括微服务架构的方案),包括服务注册、服务发现、监控等,而Spring Boot只是作为开发单一服务的框架的基础。
二、从一个HelloWorld入门Spring Boot
1、创建一个maven工程
2、导入Spring Boot相关的依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
3、编写一个主程序,用来启动Spring Boot应用
/**
* @SpringBootApplication 来标注一个主程序类,说明这是一个Spring Boot应用
*/
@SpringBootApplication
public class HelloWorldMainApplication {
// Spring应用启动起来
public static void main(String[] args) throws Exception {
SpringApplication.run(HelloWorldMainApplication.class, args);
}
}
4、编写相关的Controller、Service
@Controller
public class HelloController {
@RequestMapping("/hello")
@ResponseBody
public String hello(){
return "Hello World";
}
}
5、运行主程序测试
6、简化部署
可以在pom.xml文件中添加以下代码(插件)。这个插件可以将这个应用打成jar包,直接使用java -jar的命令进行执行。
<!--这个插件,可以将应用打包成一个可执行的jar包-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
三、Hello World探究
1、pom文件中的父项目
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
</parent>
点击spring-boot-starter-parent,查看他的父项目是:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.0.1.RELEASE</version>
<relativePath>../../spring-boot-dependencies</relativePath>
</parent>
spring-boot-dependencies来真正管理Spring Boot应用里面的所有依赖版本。他是Spring Boot的版本仲裁中心,以后我们导入依赖默认是不需要写版本的(没有在dependencies里面管理的依赖自然需要声明版本号)。
2、Spring Boot中的场景启动器
Spring Boot通过Starter来提供系统级服务,Spring Boot已经提供了一系列的Starter,比如需要开发一个Web应用,只需要在pom.xml文件中添加以下声明即可。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
注: spring-boot-starter:spring-boot场景启动器;spring-boot-starter-web:帮我们导入了web模块正常运行所依赖的组件。
Spring Boot将所有的功能场景都抽取出来,做成一个个的starters(启动器),只需要在项目里面引入这些starter 相关场景的所有依赖都会导入进来。要用什么功能就导入什么场景的启动器,Spring Boot会自动为你配置好Spring需要的各种配置文件、依赖包、以及合适的版本。
下面是Spring Boot提供的常用Starter,具体信息见官方文档:
3、主程序类
/**
* @SpringBootApplication 来标注一个主程序类,说明这是一个Spring Boot应用
*/
@SpringBootApplication
public class HelloWorldMainApplication {
// Spring应用启动起来
public static void main(String[] args) throws Exception {
SpringApplication.run(HelloWorldMainApplication.class, args);
}
}
@SpringBootApplication: Spring Boot应用标注在某个类上说明这个类是Spring Boot的主配置类,Spring Boot 就应该运行这个类的main方法来启动Spring Boot应用。
@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: Spring Boot的配置类;标注在某个类上,表示这是一个Spring Boot的配置类。
@Configuration:配置类上来标注这个注解,表示这个类是一个配置类,用来取代Spring中的配置文件。配置类也是容器中的一个组件(@Component)。
@EnableAutoConfiguration:开启自动配置功能; 以前我们需要配置的东西,Spring Boot帮我们自动配置;@EnableAutoConfiguration告诉SpringBoot开启自动配置功能,这样自动配置才能生效。
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
@AutoConfigurationPackage:自动配置包
@Import(AutoConfigurationPackages.Registrar.class):
Spring的底层注解@Import,给容器中导入一个组件;导入的组件由 AutoConfigurationPackages.Registrar.class;
将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器。
四、使用IDEA快速创建Spring Boot项目