Spring 常用注解及含义(结合业务怎么用)
Spring 注解题范围很大,面试时按 组件注册 → 注入 → Web → 事务 → 配置 几条线说,每条带一个项目里的用法,比 alphabet 背诵强。
题目
Spring 常用注解有哪些?分别是什么意思?
参考答案(口述要点)
核心:IoC 容器管理 Bean、DI 注入依赖、AOP 切面(事务、日志)。
常提:@Component系列、@Autowired、@Configuration+@Bean、@RestController、@Transactional、@Value/@ConfigurationProperties。
详细解析(分组)
1. 注册 Bean(告诉 Spring 这是个组件)
| 注解 | 含义 |
|---|---|
@Component | 通用组件 |
@Service | 业务层(语义化,本质仍是 Component) |
@Repository | DAO 层,异常转 DataAccessException |
@Controller / @RestController | Web 控制器;后者 = Controller + 方法体默认 @ResponseBody |
@RestController
@RequestMapping("/api/user")
public class UserController {
private final UserService userService;
public UserController(UserService userService) { // 构造器注入,推荐
this.userService = userService;
}
}2. 依赖注入
| 注解 | 含义 |
|---|---|
@Autowired | 按类型注入,可配合 @Qualifier 指定名字 |
@Resource | JSR-250,先按名字再按类型 |
@Value("${app.timeout}") | 注入配置项 |
3. 配置类
@Configuration
public class AppConfig {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}@Bean 方法返回值交给容器管理;第三方类没法打 @Component 时常用这招。
4. Web 映射
@RequestMapping / @GetMapping / @PostMapping、@PathVariable、@RequestBody、@RequestParam。
5. 事务
@Service
public class OrderService {
@Transactional(rollbackFor = Exception.class)
public void createOrder(OrderDTO dto) {
orderMapper.insert(dto);
stockMapper.deduct(dto.getSkuId(), dto.getQty());
}
}默认只对 RuntimeException 回滚;检查异常要 rollbackFor。同类内部自调用 事务不生效(没走代理),需拆类或注入自身代理。
6. 其它高频
@Scope("prototype"):多例@Lazy:懒加载@Primary:多实现类时优先@Aspect+@Around:切面日志、权限@Valid+@NotNull:参数校验
代码与实践
项目里 Controller 薄、Service 厚:Controller 只做参数校验和调用 Service;事务打在 Service 上;Mapper 用 MyBatis 的 @Mapper 或 @MapperScan。
写在最后
注解背不完,抓 容器、注入、Web、事务 四条线,每条举一个自己模块的例子就够撑一面。
创作不易,转载请注明出处和作者。
