Skip to content

你用过哪些 Spring 的注解

约 887 字大约 3 分钟

Spring框架小红书

2025-03-14

⭐ 题目日期:

小红书 - 2024/11/11

📝 题解:

在Spring框架中,注解(Annotation)是简化开发的核心工具之一。以下是我常用的一些Spring注解及其主要用途,按模块分类整理:


1. 核心注解(依赖注入与Bean管理)

  • @Component
    通用注解,标记类为Spring管理的Bean(自动扫描)。
  • @Service
    标识服务层组件,是@Component的特化。
  • @Repository
    标识数据访问层(DAO),继承自@Component,支持异常转换。
  • @Controller / @RestController
    标识控制层(Web请求处理),@RestController@Controller+@ResponseBody的组合。
  • @Autowired
    自动注入依赖(按类型匹配),常用于构造函数、字段或方法。
  • @Qualifier
    按名称指定注入的Bean,解决同一类型多个Bean的歧义。
  • @Primary
    优先注入标记的Bean(当存在多个同类型Bean时)。
  • @Scope
    定义Bean的作用域(如singletonprototype)。
  • @Lazy
    延迟初始化Bean(首次使用时创建)。
  • @Value
    注入外部配置值(如@Value("${property.key}"))。

2. Spring MVC(Web开发)

  • @RequestMapping
    映射HTTP请求到控制器方法,支持路径、方法类型(GET/POST等)。
  • @GetMapping / @PostMapping
    简化的请求映射(等价于@RequestMapping(method=RequestMethod.GET/POST))。
  • @RequestParam
    绑定HTTP请求参数到方法参数。
  • @PathVariable
    绑定URL路径变量到方法参数。
  • @RequestBody
    将HTTP请求体反序列化为Java对象(如JSON/XML)。
  • @ResponseBody
    将方法返回值序列化为HTTP响应体。
  • @ModelAttribute
    绑定请求参数到模型对象,或在方法返回时添加到模型。
  • @ExceptionHandler
    定义控制器内的异常处理方法。

3. 配置与条件化

  • @Configuration
    标记类为配置类(替代XML配置)。
  • @Bean
    在配置类中定义Bean(方法级别)。
  • @Import
    导入其他配置类。
  • @PropertySource
    加载外部配置文件(如application.properties)。
  • @Profile
    根据环境激活Bean(如@Profile("dev"))。
  • @Conditional
    条件化注册Bean(需实现Condition接口)。
  • @EnableAutoConfiguration
    (Spring Boot)启用自动配置。
  • @SpringBootApplication
    (Spring Boot)组合注解,包含@Configuration@EnableAutoConfiguration@ComponentScan

4. 数据访问与事务

  • @Transactional
    声明事务管理(可定义传播行为、隔离级别等)。
  • @Entity / @Table
    (JPA)标记实体类与数据库表映射。
  • @Id / @GeneratedValue
    (JPA)定义主键和生成策略。
  • @Query
    (Spring Data JPA)自定义JPQL或原生SQL查询。

5. AOP(面向切面编程)

  • @Aspect
    定义切面类。
  • @Pointcut
    定义切点表达式(指定拦截目标)。
  • @Before / @After / @Around
    定义通知类型(前置/后置/环绕增强)。

6. 测试

  • @SpringBootTest
    (Spring Boot)标记集成测试类,加载完整应用上下文。
  • @MockBean / @SpyBean
    注入Mock或Spy对象到Spring上下文。
  • @Test
    (JUnit)标记测试方法。

7. 其他常用注解

  • @Scheduled
    定义定时任务(需配合@EnableScheduling)。
  • @Async
    标记异步执行方法(需配合@EnableAsync)。
  • @Cacheable / @CacheEvict
    声明方法结果缓存或清除缓存。
  • @Valid / @Validated
    启用方法参数校验(结合JSR-303校验注解如@NotNull)。

示例代码片段

@RestController
@RequestMapping("/api")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/users/{id}")
    public ResponseEntity<User> getUser(@PathVariable Long id) {
        User user = userService.findById(id);
        return ResponseEntity.ok(user);
    }

    @PostMapping("/users")
    public ResponseEntity<User> createUser(@Valid @RequestBody User user) {
        User savedUser = userService.save(user);
        return ResponseEntity.status(HttpStatus.CREATED).body(savedUser);
    }
}

@Service
public class UserService {

    @Transactional(readOnly = true)
    public User findById(Long id) {
        // 查询逻辑
    }
}

总结

Spring注解极大地简化了配置和开发,通过声明式编程提升效率。熟悉常用注解可快速构建模块化、可维护的应用程序。实际开发中,结合Spring Boot的自动配置(如@SpringBootApplication)和第三方库(如Lombok的@Data),能进一步减少样板代码。