注解太多,容易混淆。在有了一定Spring基础后学习SpringBoot,对Spring Boot的自动配置和约定优于配置的理念还没完全掌握。
将注解分门别类,比如核心配置、依赖注入、Web开发、数据访问、条件注解等,每个类别下列出常用注解,解释作用、用法、示例,并有实际代码。
Spring Boot核心注解大全,按功能模块分类,每个注解都配有使用场景和代码示例。
注解 | 作用 | 示例代码 |
---|---|---|
@SpringBootApplication |
启动类核心注解(包含@Configuration +@ComponentScan +@EnableAutoConfiguration ) |
@SpringBootApplicationpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); }} |
注解 | 作用 | 示例代码 |
---|---|---|
@Configuration |
声明该类为配置类(替代XML配置) |
|
@Bean |
将方法返回对象注册为Bean | 见上例 |
@Import |
导入其他配置类 |
|
@PropertySource |
加载外部配置文件 |
|
注解 | 作用 | 示例代码 |
---|---|---|
@Autowired |
自动注入Bean(按类型) |
|
@Qualifier |
指定具体Bean名称(解决歧义) |
|
@Primary |
标注优先注入的Bean |
|
@Value |
注入配置文件中的值 | java@Value("${server.port}")private int port; |
注解 | 作用 | 示例代码 |
---|---|---|
@RestController |
REST风格控制器(等效@Controller+@ResponseBody) |
|
@RequestMapping |
映射请求路径 | @RequestMapping(value = "/users", method = RequestMethod.GET) |
@GetMapping |
简化GET请求映射 |
|
@PostMapping |
简化POST请求映射 |
|
注解 | 作用 | 示例代码 |
---|---|---|
@PathVariable |
获取URL路径参数 |
|
@RequestParam |
获取URL查询参数 |
|
@RequestBody |
接收JSON格式请求体 |
|
@RequestHeader |
获取请求头信息 |
|
注解 | 作用 | 示例代码 |
---|---|---|
@Entity |
声明JPA实体类 |
|
@Repository |
标注数据访问层组件 |
|
@Transactional |
声明事务管理 |
|
注解 | 作用 | 示例代码 |
---|---|---|
@Mapper |
标识MyBatis的Mapper接口 |
|
@MapperScan |
指定Mapper接口扫描路径 |
|
注解 | 作用 | 示例代码 |
---|---|---|
@ConditionalOnClass |
类路径存在指定类时生效 |
|
@ConditionalOnMissingBean |
容器中不存在指定Bean时生效 |
|
@ConditionalOnProperty |
配置文件存在指定属性时生效 |
|
注解 | 作用 | 示例代码 |
---|---|---|
@SpringBootTest |
启动完整Spring上下文进行测试 |
|
@WebMvcTest |
仅测试Web层(不加载完整上下文) |
|
@DataJpaTest |
仅测试JPA组件 |
|
// 统一响应格式
@RestControllerAdvice
public class GlobalExceptionHandler {
// 处理所有Controller抛出的异常
@ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public Result> handleException(Exception e) {
return Result.error(e.getMessage());
}
}
// 自定义权限校验注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@PreAuthorize("hasRole('ADMIN')") // 复用Spring Security的权限校验
public @interface AdminOnly {}
@Component
:通用组件标识
@Service
:业务逻辑层组件(语义化标注)
@Repository
:数据访问层组件(会转换数据库异常)
@Autowired
:按类型注入,必须存在对应Bean
@Resource
:按名称注入(可指定name属性)
// 方法一:使用
@DependsOn
@Configuration
@DependsOn("databaseInitializer")
public class ServiceConfig { ... }
// 方法二:实现PriorityOrdered接口
@Component
public class HighPriorityBean implements PriorityOrdered {
@Override
public int getOrder() {
return Ordered.HIGHEST_PRECEDENCE;
}
}
完成学习后请检查:
能否正确区分@RestController
与@Controller
?
是否掌握@Transactional
的事务传播配置?
能否写出一个带参数校验的完整Controller?
是否理解@ConditionalOnProperty
的使用场景?