Spring常用注解汇总

1. IOC容器与Bean管理

| 注解 | 说明 | 示例 |
| @Component | 通用注解,标记类为Spring Bean | @Component public class MyService { ... } |
| @Controller | 标记Web控制器(应用在MVC的控制层) | @Controller public class UserController { ... } |
| @Service | 标记业务逻辑层组件(Service层) | @Service public class UserService { ... } |
| @Repository | 标记数据访问层组件(DAO层),自动转换数据访问异常 | @Repository public class UserDao { ... } |
| @Configuration | 标记配置类,用于定义Bean | @Configuration public class AppConfig { ... } |
| @Bean | 在配置类中定义Bean,常用于第三方库集成 | @Bean public DataSource dataSource() { return new HikariDataSource(); } |
| @Autowired | 自动注入依赖(按类型匹配,优先构造器注入) | @Autowired private UserService userService; |
| @Qualifier | 按名称注入Bean(解决同类型多个Bean的歧义) | @Autowired @Qualifier("mysqlDataSource") DataSource dataSource; |
| @Primary | 标记优先注入的Bean | @Bean @Primary public DataSource primaryDataSource() { ... } |
| @Value | 注入配置文件中的值 | @Value("${app.timeout}") private int timeout; |

@Scope 定义创建Bean的模式(方法上得有@Bean) 类型包括:Singleton、Prototype、Request、Session

2. Web开发(Spring MVC)

| 注解 | 说明 | 示例 |
| @RestController | @Controller + @ResponseBody,用于RESTAPI | @RestController public class UserApi { ... } |
| @RequestMapping | 映射HTTP请求到方法 | @RequestMapping(value = "/users", method = RequestMethod.GET) |
| @GetMapping | 处理HTTP GET请求,用于查询资源 | @GetMapping("/{id}") public User getById(@PathVariable Long id) |
| @PostMapping | 处理HTTP POST请求,用于创建新资源(通常配合@RequestBody接收请求体数据) | @PostMapping("/create") public User create(@RequestBody User user) |
| @PutMapping | 处理HTTP PUT请求,用于全量更新资源(需明确指定资源标识如/users/{id}) | @PutMapping("/users/{id}") public ResponseEntity<User> updateUser(@PathVariable Long id, @RequestBody User user ) {...} |
| @DeleteMapping | 处理HTTP DELETE请求,用于删除资源 | @DeleteMapping("/users/{id}") public ResponseEntity<Void> deleteUser(@PathVariable Long id) {...} |
| @PathVariable | 从URL路径中获取变量 | @GetMapping("/users/{id}") |
| @RequestParam | 获取请求参数(支持默认值和类型转换) | public List<User> search(@RequestParam(defaultValue = "10") int limit) |
| @RequestBody | 将请求体(JSON/XML)转换为Java对象 | @PostMapping public User create(@RequestBody User user) |
| @ResponseBody | 将返回值写入响应体(如返回JSON) | @ResponseBody public User getUser() { ... } |

@CrossOrigin 允许跨域请求 @CrossOrigin(origins = "http://example.com")

3. 数据访问与事务

| 注解 | 说明 | 示例 |
| @Transactional | 声明事务(方法或级别) | @Transactional public void updateUser(User user) { ... } |
| @Entity | JPA注解(标记数据库实体类) | @Entity @Table(name = "users") public class User { ... } |
| @Repository | 数据库访问层组件(Spring Data JPA自动实现接口) | @Repository public interface UserRepository extends JpaRepository<User, Long> { ... } |

@Query 自定义JPQL或原生SQL查询 @Query("SELECT u FROM User u WHERE u.age > :age") List<User> findByAge(@Param("age") int ag

4. AOP与切面编程

| 注解 | 说明 | 示例 |
| @Aspect | 声明切面类 | @Aspect @Component public class LoggingAspect { ... } |
| @Before | 前置通知(方法执行前执行) | @Before("execution(* com.example.service.*.*(..))") |
| @After | 后置通知(方法执行后执行,无论是否异常) | @After("execution(* com.example.service.*.*(..))") |
| @Around | 环绕通知(可控制方法执行流程) | @Around("execution(* com.example.service.*.*(..))") |

@Pointcut 定义切点表达式(复用切点逻辑) @Pointcut("execution(* com.example.service.*.*(..))")

5. SpringBoot特有注解

| 注解 | 说明 | 示例 |
| @SpringBootApplication | 启动类注解(组合了@Configuration,@EnableAutoConfiguration,) | @SpringBootApplication public class MyApp { ... } |
| @EnableAutoConfiguration | 启动自动配置(Spring Boot根据依赖自动配置Bean) | 通常由@SpringBootApplication包含 |
| @ConditionalOnProperty | 根据配置文件条件注册Bean | @Bean @ConditionalOnProperty(name = "feature.enabled", havingValue = "true") |

@SpringBootTest 启动完整Spring上下文集成测试 @SpringBootTest class MyIntegrationTest { ... }
相关推荐
涡能增压发动积21 小时前
同样的代码循环 10次正常 循环 100次就抛异常?自定义 Comparator 的 bug 让我丢尽颜面
后端
云烟成雨TD21 小时前
Spring AI Alibaba 1.x 系列【6】ReactAgent 同步执行 & 流式执行
java·人工智能·spring
Wenweno0o21 小时前
0基础Go语言Eino框架智能体实战-chatModel
开发语言·后端·golang
于慨21 小时前
Lambda 表达式、方法引用(Method Reference)语法
java·前端·servlet
swg32132121 小时前
Spring Boot 3.X Oauth2 认证服务与资源服务
java·spring boot·后端
tyung21 小时前
一个 main.go 搞定协作白板:你画一笔,全世界都看见
后端·go
gelald21 小时前
SpringBoot - 自动配置原理
java·spring boot·后端
殷紫川21 小时前
深入理解 AQS:从架构到实现,解锁 Java 并发编程的核心密钥
java
一轮弯弯的明月21 小时前
贝尔数求集合划分方案总数
java·笔记·蓝桥杯·学习心得
chenjingming66621 小时前
jmeter线程组设置以及串行和并行设置
java·开发语言·jmeter