【后端强迫症系列】Spring项目注解顺序

58 阅读1分钟

在Spring项目中注解先后顺序不重要,根据业内最佳实践,可以整理出一套相对舒服的规则。

@Transactional@Override 为例:

  1. 功能性注解优先原则

    • @Transactional 是功能性注解,定义了方法的事务行为
    • @Override 是编译器提示注解,主要用于编译时检查
  2. Spring框架处理顺序

    • Spring AOP 需要先识别和处理 @Transactional 注解来创建代理
    • @Override 在编译后对运行时框架没有实际影响
  3. 可读性和维护性

    • 业务相关的注解(如 @Transactional)放在前面更醒目
    • 遵循"重要性递减"的原则排列注解
  4. 行业标准

    • Spring 官方文档和示例代码都采用这种顺序
    • 大部分开源项目和企业项目都遵循这个惯例

完整的注解顺序建议

@Slf4j                              // 日志注解
@Service                            // Spring框架注解
@Transactional(readOnly = true)     // 类级别默认只读事务(如果有类级别事务注解)
public class UserService {
    
    @Transactional                  // 方法级别的功能注解
    @Override                       // 编译器注解
    @SuppressWarnings("unchecked")  // 抑制警告注解(如果需要)
    public void someMethod() {
        log.info("方法执行");  // 使用@Slf4j生成的log对象
    }
}