Spring Boot 概述
什么是Spring Boot?
Spring Boot是Spring框架的一个子项目,旨在简化基于Spring的应用开发过程。它通过"约定优于配置"的原则,提供了一系列自动配置和快速开发的特性,使开发者能够快速搭建独立运行的、生产级的Spring应用程序。
Spring Boot的核心特点
-
自动配置:根据项目依赖自动配置Spring应用
-
起步依赖:简化依赖管理,提供功能化的依赖组
-
内嵌服务器:内置Tomcat、Jetty或Undertow,无需部署WAR文件
-
命令行界面:支持使用Groovy脚本快速开发
-
Actuator:提供生产就绪功能,如健康检查、指标收集等
Spring Boot的主要好处
1. 简化配置
-
作用:大幅减少XML配置和样板代码
-
示例:自动配置数据源、事务管理等
-
好处:开发者可以更专注于业务逻辑而非配置
2. 快速开发
-
作用:提供快速启动模板和开发工具
-
示例:Spring Initializr在线生成项目结构
-
好处:几分钟内即可搭建可运行的项目框架
3. 微服务友好
-
作用:天然支持微服务架构
-
示例:轻松集成Spring Cloud组件
-
好处:简化分布式系统开发
4. 生产就绪
-
作用:内置监控和管理端点
-
示例:/actuator/health端点提供健康检查
-
好处:方便运维和监控应用状态
5. 丰富的生态系统
-
作用:无缝集成Spring生态系统和其他流行技术
-
示例:Spring Data、Spring Security等
-
好处:开发者可以利用成熟的解决方案
Spring Boot的主要作用
-
Web应用开发:快速构建RESTful API或传统Web应用
-
批处理应用:简化批处理作业开发
-
微服务架构:作为微服务的基础框架
-
企业应用集成:简化与其他系统的集成
-
原型开发:快速验证想法和概念
Spring Boot与传统Spring应用的对比
特性 | Spring Boot | 传统Spring |
---|---|---|
配置方式 | 自动配置+约定优于配置 | 大量XML/Java配置 |
依赖管理 | 起步依赖(starter)简化 | 手动管理各个依赖 |
部署方式 | 内嵌服务器,可执行JAR | 需要外部容器部署WAR |
启动速度 | 更快 | 相对较慢 |
开发效率 | 更高 | 相对较低 |
典型Spring Boot应用结构
my-application/
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/example/
│ │ │ ├── Application.java # 主启动类
│ │ │ ├── controller/ # 控制器
│ │ │ ├── service/ # 服务层
│ │ │ ├── repository/ # 数据访问
│ │ │ └── model/ # 实体类
│ │ └── resources/
│ │ ├── static/ # 静态资源
│ │ ├── templates/ # 模板文件
│ │ ├── application.properties # 配置文件
│ │ └── application.yml # 配置文件(YAML格式)
│ └── test/ # 测试代码
├── pom.xml # Maven配置
└── target/ # 构建输出
1. 核心注解
@SpringBootApplication
-
用途:主启动类注解,组合了@Configuration、@EnableAutoConfiguration和@ComponentScan
-
用法:标注在主类上
-
位置:应用主类
-
示例:
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
2. Controller相关注解 (非常重要噢)
@RestController
-
用途:组合了@Controller和@ResponseBody,用于RESTful控制器
-
用法:标注在控制器类上
-
位置:控制器类
-
示例:
@RestController
@RequestMapping("/api")
public class UserController {
// ...
}
@RequestMapping
-
用途:映射HTTP请求到方法
-
用法:类或方法级别(既可以放在类上面也可以放在方法上面)
-
位置:控制器类或方法
-
示例:
@RequestMapping(value = "/users", method = RequestMethod.GET)
@GetMapping/@PostMapping/@PutMapping/@DeleteMapping
-
用途:特定HTTP方法的简化@RequestMapping
-
用法:方法级别
-
位置:控制器方法
-
示例:
@GetMapping("/{id}")
public User getUser(@PathVariable Long id) {
// ...
}
@PathVariable
-
用途:获取URL路径中的变量
-
用法:方法参数
-
位置:控制器方法参数
-
示例:
@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id) {
// ...
}
@RequestParam
-
用途:获取请求参数
-
用法:方法参数
-
位置:控制器方法参数
-
示例:
@GetMapping("/users")
public List<User> getUsers(@RequestParam(required = false) String name) {
// ...
}
3. 依赖注入相关
@Autowired
-
用途:自动装配依赖
-
用法:字段、构造方法或setter方法
-
位置:需要注入的类成员
-
示例:
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
}
@Component
-
用途:通用组件注解
-
用法:类级别
-
位置:组件类
-
示例:
@Component
public class MyComponent {
// ...
}
@Service
-
用途:标注服务层组件
-
用法:类级别
-
位置:服务类
-
示例:
@Service
public class UserService {
// ...
}
@Repository
-
用途:标注数据访问组件
-
用法:类级别
-
位置:DAO类
-
示例:
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
// ...
}
4. 配置相关
@Configuration
-
用途:定义配置类
-
用法:类级别
-
位置:配置类
-
示例:
@Configuration
public class AppConfig {
@Bean
public MyBean myBean() {
return new MyBean();
}
}
@Bean
-
用途:声明一个方法返回的对象作为Spring Bean
-
用法:方法级别
-
位置:配置类中的方法
-
示例:
@Bean
public DataSource dataSource() {
// 创建并返回DataSource
}
@Value
-
用途:注入属性值
-
用法:字段或方法参数
-
位置:需要注入值的类成员
-
示例:
@Value("${app.name}")
private String appName;
5. 数据相关
@Entity
-
用途:标注JPA实体类
-
用法:类级别
-
位置:实体类
-
示例:
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// ...
}
@Transactional
-
用途:声明事务
-
用法:类或方法级别
-
位置:服务类或方法
-
示例:
@Service
@Transactional
public class UserService {
// ...
}
6. 测试相关
@SpringBootTest
-
用途:Spring Boot集成测试
-
用法:类级别
-
位置:测试类
-
示例:
@SpringBootTest
class MyApplicationTests {
@Test
void contextLoads() {
}
}
7. AOP相关
@Aspect
-
用途:定义切面类
-
用法:类级别
-
位置:切面类
-
示例:
@Aspect
@Component
public class LoggingAspect {
// ...
}
@Before/@After/@Around
-
用途:定义通知类型
-
用法:方法级别
-
位置:切面类中的方法
-
示例:
@Before("execution(* com.example.service.*.*(..))")
public void beforeAdvice(JoinPoint joinPoint) {
// ...
}
以上是Spring Boot开发中最常用的注解,掌握这些注解可以满足大部分开发需求。