Spring boot注解介绍
1. Spring 核心注解
Spring Boot 是基于 Spring 框架的,所以核心注解依然适用。
✅ 常见核心注解
@Component
表示一个通用组件,Spring 会自动扫描并注入到容器中。@Component public class MyComponent {public void sayHello() {System.out.println("Hello from Component!");} }
@Service
表示业务逻辑层的组件(语义化,更适合 Service 层)。@Service public class UserService {public String getUser() {return "User";} }
@Repository
表示持久层的组件(DAO 层),会额外处理数据库相关异常。@Repository public class UserRepository {public void saveUser() {System.out.println("User saved");} }
@Controller / @RestController
@Controller
:返回视图(模板引擎,如 Thymeleaf)。@RestController
:等价于@Controller + @ResponseBody
,返回 JSON 数据。
@RestController @RequestMapping("/api") public class UserController {@GetMapping("/hello")public String hello() {return "Hello, Spring Boot!";} }
@Autowired
自动注入 Bean(默认按类型匹配)。@RestController public class HelloController {@Autowiredprivate UserService userService; }
2. Spring Boot 特有注解
✅ 启动 & 配置类
@SpringBootApplication
Spring Boot 的核心启动注解,相当于:@Configuration
@EnableAutoConfiguration
@ComponentScan
@SpringBootApplication public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);} }
@EnableAutoConfiguration
开启自动配置(Spring Boot 会根据依赖自动配置 Bean)。@ConfigurationProperties
将配置文件(application.yml
/application.properties
)绑定到 Java 类上。@Component @ConfigurationProperties(prefix = "app") public class AppProperties {private String name;private String version;// getter/setter }
@Value
直接注入配置属性。@Value("${app.name}") private String appName;
3. Web 注解
✅ 请求映射
@RequestMapping:定义路径映射,可用于类和方法。
@GetMapping / @PostMapping / @PutMapping / @DeleteMapping:更具体的 HTTP 方法注解。
@RestController @RequestMapping("/users") public class UserController {@GetMapping("/{id}")public String getUser(@PathVariable Long id) {return "User " + id;} }
✅ 参数绑定
@PathVariable:获取路径参数。
@RequestParam:获取请求参数(?key=value)。
@RequestBody:绑定请求体 JSON 到对象。
@RequestHeader:获取请求头。
@PostMapping("/create") public String createUser(@RequestBody User user,@RequestHeader("token") String token) {return "User created: " + user.getName() + ", token=" + token; }
4. 数据验证注解(JSR-303)
常用于参数校验,结合 @Valid
或 @Validated
使用。
@NotNull:不能为空
@NotBlank:字符串不能为空
@Size(min, max):限制长度
@Email:校验邮箱
@Pattern:正则校验
public class UserDTO {@NotBlank(message = "用户名不能为空")private String username;@Email(message = "邮箱格式不正确")private String email; }@PostMapping("/register") public String register(@Valid @RequestBody UserDTO user) {return "注册成功"; }
5. 事务 & 异步
@Transactional:开启事务管理。
@Service public class OrderService {@Transactionalpublic void createOrder() {// 数据库操作} }
@Async:异步执行方法。
@Service public class EmailService {@Asyncpublic void sendEmail(String to) {System.out.println("Sending email to " + to);} }
6. 测试相关注解
@SpringBootTest:启动完整 Spring Boot 上下文。
@WebMvcTest:仅启动 Web 层。
@MockBean:模拟一个 Bean(用于单元测试)。
@SpringBootTest class UserServiceTest {@Autowiredprivate UserService userService; }
7. 条件注解(高级用法)
Spring Boot 提供条件装配,按环境决定是否加载 Bean。
@ConditionalOnProperty:配置属性满足条件时加载。
@ConditionalOnMissingBean:当容器中没有某个 Bean 时才加载。
@Profile:指定环境下生效(如
dev
,prod
)。@Service @Profile("dev") public class DevUserService implements UserService {}@Service @Profile("prod") public class ProdUserService implements UserService {}
8. 其他常用注解
@Bean:在
@Configuration
类中定义 Bean。@Primary:多个 Bean 时,标记优先注入。
@Qualifier:按名称指定 Bean。
@Order:指定加载顺序。
👉 总结:
核心注解(@Component, @Service, @Controller…)用于 Bean 管理。
Spring Boot 特有注解(@SpringBootApplication, @ConfigurationProperties…)用于简化配置。
Web 注解 处理请求映射和参数绑定。
事务、异步、测试、条件注解 提供更高级的控制。