一、常用技术
自动配置(Auto-Configuration)
Spring Boot 根据类路径中的依赖自动配置应用程序。例如,引入spring-boot-starter-web
会自动配置内嵌 Tomcat 和 Spring MVC。
@EnableAutoConfiguration
起步依赖(Starter Dependencies)
通过预定义的依赖集合(如spring-boot-starter-data-jpa
)简化依赖管理,避免版本冲突。
内嵌服务器(Embedded Server)
默认集成 Tomcat、Jetty 或 Undertow,无需单独部署 WAR 文件。
Actuator 监控
提供生产级监控端点(如健康检查、性能指标),通过spring-boot-starter-actuator
启用。
二、核心注解使用
- @SpringBootApplication
作用:主类注解,组合了以下三个核心注解:
@Configuration
:标记类为配置类,定义 Bean。
@EnableAutoConfiguration
:启用自动配置。
@ComponentScan
:自动扫描当前包及其子包的组件(如@Service
、@Controller
)。
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
- @Configuration 与 @Bean
@Configuration
:声明一个类为配置类,替代 XML 配置。
@Bean
:在配置类中定义 Bean 实例。
@Configuration
public class AppConfig {
@Bean
public DataSource dataSource() {
return new HikariDataSource();
}
}
- @RestController 与 @RequestMapping
@RestController
:组合@Controller
和@ResponseBody
,直接返回 JSON 数据。
@RequestMapping
:映射 HTTP 请求到控制器方法。
@RestController
@RequestMapping("/api")
public class UserController {
@GetMapping("/users")
public List<User> getUsers() {
return userService.findAll();
}
}
- @Autowired 与 @Qualifier
@Autowired
:自动注入依赖,按类型匹配。
@Qualifier
:指定注入的 Bean 名称,解决歧义性。
- @Value
注入配置文件中的属性值:@Value("${server.port}")
private int port;
- @SpringBootTest
用于集成测试,加载完整的应用程序上下文:@SpringBootTest
class MyApplicationTests {
@Test
void contextLoads() {}
}
三、注解说明及应用
1. 核心注解
注解 |
说明 |
示例 |
@SpringBootApplication |
主启动类注解,组合了 @Configuration 、@EnableAutoConfiguration 和 @ComponentScan |
标记 main 方法所在的类 |
@Configuration |
声明一个类为配置类,替代 XML 配置 |
定义 Bean 或配置类 |
@Bean |
在配置类中声明一个 Bean |
@Bean public DataSource dataSource() { ... } |
@ComponentScan |
自动扫描组件(如 @Component , @Service 等) |
在启动类中指定包扫描路径 |
@EnableAutoConfiguration |
启用 Spring Boot 自动配置机制 |
通常由 @SpringBootApplication 包含 |
2. Web 开发(Spring MVC)
注解 |
说明 |
示例 |
@RestController |
组合 @Controller 和 @ResponseBody ,直接返回 JSON/XML 数据 |
标记 REST API 控制器类 |
@RequestMapping |
映射 HTTP 请求路径和方法 |
@RequestMapping("/api") |
@GetMapping / @PostMapping |
简化版请求映射(对应 HTTP 方法) |
@GetMapping("/users") |
@RequestParam |
绑定请求参数到方法参数 |
@RequestParam("name") String name |
@PathVariable |
绑定 URL 路径变量到方法参数 |
@PathVariable("id") Long id |
@RequestBody |
将请求体 JSON 反序列化为对象 |
@RequestBody User user |
@ResponseStatus |
设置 HTTP 响应状态码 |
@ResponseStatus(HttpStatus.CREATED) |
@ExceptionHandler |
处理控制器内的异常 |
@ExceptionHandler(Exception.class) |
3. 数据访问(Spring Data JPA)
注解 |
说明 |
示例 |
@Entity |
声明 JPA 实体类 |
标记数据库表对应的实体类 |
@Table |
指定实体对应的数据库表名 |
@Table(name = "users") |
@Id |
标记主键字段 |
@Id private Long id; |
@GeneratedValue |
主键生成策略 |
@GeneratedValue(strategy = GenerationType.IDENTITY) |
@Repository |
标记数据访问层(DAO)组件 |
继承 JpaRepository 的接口 |
@Transactional |
声明事务管理(方法或类级别) |
@Transactional |
@Query |
自定义 JPA 查询语句 |
@Query("SELECT u FROM User u WHERE u.name = ?1") |
4. 依赖注入(IoC)
注解 |
说明 |
示例 |
@Autowired |
自动注入依赖(推荐使用构造器注入) |
@Autowired private UserService userService; |
@Component |
通用组件注解,标记 Spring 管理的 Bean |
通用组件类 |
@Service |
标记服务层组件 |
@Service public class UserService { ... } |
@Primary |
指定优先注入的 Bean |
解决多个同类型 Bean 的冲突 |
@Qualifier |
按名称注入指定 Bean |
@Qualifier("userServiceImpl") |
5. 配置管理
注解 |
说明 |
示例 |
@Value |
注入配置文件中的值 |
@Value("${app.name}") |
@ConfigurationProperties |
将配置文件绑定到 Java 对象 |
@ConfigurationProperties(prefix = "app") |
@Profile |
指定配置或 Bean 在特定环境下生效 |
@Profile("dev") |
6. 安全(Spring Security)
注解 |
说明 |
示例 |
@EnableWebSecurity |
启用 Web 安全配置 |
配置类继承 WebSecurityConfigurerAdapter |
@PreAuthorize |
方法执行前的权限校验 |
@PreAuthorize("hasRole('ADMIN')") |
@Secured |
基于角色的访问控制 |
@Secured("ROLE_USER") |
7. 高级特性
- AOP(面向切面编程)
@Aspect
: 声明切面类
@Pointcut
: 定义切入点表达式
@Before
/ @After
/ @Around
: 定义通知类型
- 缓存
@EnableCaching
: 启用缓存
@Cacheable
: 缓存方法结果
- 消息队列(如 RabbitMQ)
@EnableRabbit
: 启用 RabbitMQ
@RabbitListener
: 监听消息队列
- 定时任务
@EnableScheduling
: 启用定时任务
@Scheduled
: 定义任务执行时间
8. 测试
注解 |
说明 |
示例 |
@SpringBootTest |
启动完整 Spring 上下文进行集成测试 |
测试类注解 |
@MockBean |
模拟并替换 Spring 上下文中的 Bean |
在测试中模拟依赖 |
@Test |
JUnit 测试方法 |
@Test void testMethod() { ... } |
9. Actuator 监控
- 通过
spring-boot-starter-actuator
提供端点(如 /health
, /metrics
)
- 常用配置项:
management.endpoints.web.exposure.include=*
10. 典型项目结构
src/main/java
└── com.example.demo
├── config
├── controller
├── service
├── repository
└── model
四、其他常用技术
- Spring Data JPA:简化数据库操作,通过
@Repository
和@Entity
注解。
- Spring Security:通过
@EnableWebSecurity
配置安全策略。
- Profile 配置:使用
@Profile
区分不同环境(如开发、生产)。