1. Spring Boot 简介
什么是Spring Boot
Spring Boot是由Pivotal团队提供的全新框架,目的是简化Spring应用的初始搭建以及开发过程。Spring Boot基于Spring框架,通过约定大于配置的原则,使得开发者可以快速搭建基于Spring的应用。就是个脚手架。
Spring Boot的优势
- 快速启动:通过自动配置和预置的默认设置,开发者可以快速启动一个Spring应用。
- 简化配置:提供了一系列的注解,减少了XML配置。
- 独立运行:可以将应用打包为一个可执行的JAR文件,独立运行,不依赖外部的Servlet容器。
- 强大的社区支持:Spring Boot有着强大的社区支持和丰富的文档。
与传统Spring框架的区别
SpringBoot可以更好的去搭建Spring框架,传统的Spring框架需要大量的配置,尤其是XML配置。而Spring Boot通过自动配置,大大简化了配置过程,使得开发更加简洁和高效。
2. Spring Boot 的核心注解
@SpringBootApplication
@SpringBootApplication
是一个复合注解,包含了@Configuration
、@EnableAutoConfiguration
、@ComponentScan
。这是启动类的核心注解,表示这是一个Spring Boot应用。
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
@RestController 和 @Controller
@RestController
是@Controller
和@ResponseBody
的组合注解,表示该类是一个控制器,并且所有方法返回的都是JSON格式数据。
@RestController
public class MyController {
@GetMapping("/hello")
public String hello() {
return "Hello, World!";
}
}
@RequestMapping 和 @GetMapping
@RequestMapping
用于映射HTTP请求到处理方法上。@GetMapping
是其快捷方式,只处理GET请求。
@RestController
public class MyController {
@RequestMapping("/hello")
public String hello() {
return "Hello, World!";
}
@GetMapping("/hello")
public String helloGet() {
return "Hello, GET!";
}
}
@Autowired
@Autowired
用于自动注入依赖。
@Service
public class MyService {
public String serviceMethod() {
return "Service Method";
}
}
@RestController
public class MyController {
@Autowired
private MyService myService;
@GetMapping("/service")
public String service() {
return myService.serviceMethod();
}
}
其他常用注解
@Component
:通用组件注解。@Service
:服务层注解。@Repository
:持久层注解。@Configuration
:配置类注解。
3. Spring Boot 快速入门
创建Spring Boot项目
可以使用Spring Initializr快速生成Spring Boot项目。可以选择需要的依赖,例如Spring Web、Spring Data JPA等。
目录结构介绍
典型的Spring Boot项目结构如下:
src
├── main
│ ├── java
│ │ └── com.example.demo
│ │ ├── DemoApplication.java
│ │ ├── controller
│ │ ├── service
│ │ └── repository
│ └── resources
│ ├── application.properties
│ └── static
└── test
配置文件(application.properties 和 application.yml)
Spring Boot提供了多种配置方式,application.properties
和application.yml
是最常见的配置文件。
# application.properties
server.port=8081
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=root
# application.yml
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: root
password:
编写第一个Spring Boot应用
在Spring Boot应用中,可以通过简单的注解和少量的配置实现一个完整的功能模块。
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
@RestController
@RequestMapping("/api")
public class DemoController {
@GetMapping("/hello")
public String hello() {
return "Hello, Spring Boot!";
}
}
4.SpringBoot自动装配原理
springboot启动时,是依靠启动类的main方法来进行启动的,而main方法中执行的是SpringApplication.run()方法,而SpringApplication.run()方法中会创建spring的容器,并且刷新容器。而在刷新容器的时候就会去解析启动类,然后就会去解析启动类上的@SpringBootApplication注解,而这个注解是个复合注解,这个注解中有一个@EnableAutoConfiguration注解,这个注解就是开启自动配置,这个注解中又有@Import注解引入了一个AutoConfigurationImportSelector这个类,这个类会进过一些核心方法,然后去扫描我们所有jar包下的META-INF下的spring.factories文件,而从这个配置文件中取找key为EnableAutoConfiguration类的全路径的值下面的所有配置都加载,这些配置里面都是有条件注解的,然后这些条件注解会根据你当前的项目依赖的pom以及是否配置了符合这些条件注解的配置来进行装载的。