当前位置: 首页 > article >正文

【Java 常用注解学习笔记1】——Java 常用注解全解析:从基础到实战

Java 常用注解全解析:从基础到实战


一、引言

Java 注解(Annotation)是现代化开发中提升代码简洁性、可维护性和与框架集成的重要工具。本文系统化梳理主流框架(Spring、MyBatis-Plus、Swagger 等)的核心注解,通过分类解析、代码示例与最佳实践,帮助开发者精准掌握注解的应用场景与技巧。


二、Lombok 注解

1. 代码简化注解
注解作用示例注意事项
@Data生成 getter/setter/toString/equals/hashCode@Data public class User { ... }继承场景需搭配 @EqualsAndHashCode(callSuper=true)
@Accessors(chain=true)链式调用 setter 方法user.setName("A").setAge(20);FastJSON 反序列化兼容性问题
@Builder建造者模式User.builder().name("A").build();复杂对象慎用
2. 构造器与不可变对象
@Value // 生成全参构造器 + final 字段
public class Point {
    int x;
    int y;
}
@NoArgsConstructor // 无参构造器
@AllArgsConstructor // 全参构造器
public class User { ... }

三、MyBatis-Plus 注解

1. 数据库映射
注解作用示例
@TableName指定表名@TableName("sys_user")
@TableId主键策略@TableId(type = IdType.AUTO)
@TableField字段映射@TableField("user_name")
@Version乐观锁控制@Version private Integer version;
2. 动态表名与多数据源
// 动态表名处理器
public class DynamicTableNameHandler implements TableNameHandler {
    @Override
    public String dynamicTableName(String sql, String tableName) {
        return getCurrentYearTable(tableName);
    }
}

四、Swagger 注解

1. API 文档生成
注解作用示例
@Api控制器分组描述@Api(tags = "用户管理")
@ApiOperation接口方法描述@ApiOperation("根据ID查询用户")
@ApiModel数据模型描述@ApiModel("用户实体")
@ApiModelProperty字段描述@ApiModelProperty("用户名")
2. 生产环境优化
# 关闭Swagger
springfox:
  swagger:
    enabled: false

五、Spring 核心注解

1. 组件与依赖注入
注解作用示例
@Component通用组件标记@Component public class Util {}
@Autowired按类型注入@Autowired private UserService service;
@Primary优先注入的Bean@Primary @Bean public DataSource ds() {}
@Profile环境隔离@Profile("dev")
2. 构造器注入最佳实践
@Service
public class UserService {
    private final UserDao dao;
    @Autowired // 构造器注入(推荐)
    public UserService(UserDao dao) { this.dao = dao; }
}

六、Spring MVC 注解

1. 控制器与请求映射
注解作用示例
@RestControllerREST 控制器(自动 JSON 序列化)@RestController public class UserApi {}
@GetMappingGET 请求映射@GetMapping("/users/{id}")
@PostMappingPOST 请求映射@PostMapping("/users")
@RequestBody绑定请求体public void save(@RequestBody User user)
2. 参数绑定与校验
@GetMapping("/search")
public List<User> search(
    @RequestParam(defaultValue = "1") int page,
    @PathVariable Long id,
    @Valid @ModelAttribute UserQuery query) { ... }

七、Spring Boot 配置注解

1. 配置管理
注解作用示例
@SpringBootApplication主启动类@SpringBootApplication public class App {}
@ConfigurationProperties批量绑定配置@ConfigurationProperties(prefix="app")
@Value注入单个配置项@Value("${app.timeout}") private int timeout;
2. 条件装配
@Bean
@ConditionalOnClass(RedisClient.class) // 类路径存在时生效
@ConditionalOnProperty(name = "cache.enabled") // 配置开启时生效
public CacheService cacheService() { ... }

八、JPA/Hibernate 注解

1. 实体映射
注解作用示例
@Entity声明 JPA 实体@Entity public class User {}
@GeneratedValue主键生成策略@GeneratedValue(strategy=IDENTITY)
@OneToMany一对多关系@OneToMany(mappedBy = "user")
@Transactional声明式事务@Transactional(rollbackFor=Exception.class)
2. 乐观锁与审计
@Version // 乐观锁
private Integer version;
@CreatedDate // 自动填充创建时间
private LocalDateTime createTime;

九、校验注解(JSR 380)

1. 常用校验规则
注解作用示例
@NotBlank字符串非空(含非空格)@NotBlank private String name;
@Positive正整数校验@Positive private Integer age;
@Pattern正则校验@Pattern(regexp = "^1[3-9]\\d{9}$")
2. 自定义校验器
@Target(FIELD)
@Retention(RUNTIME)
@Constraint(validatedBy = PhoneValidator.class)
public @interface Phone {
    String message() default "手机号格式错误";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

十、最佳实践与常见问题

  1. 分层规范

    • Controller 层@Valid 校验 + @RestController
    • Service 层@Transactional 事务控制
    • DAO 层@Repository + MyBatis-Plus/JPA 注解
  2. Lombok 使用建议

    • 实体类:@Data + @Builder
    • 避免滥用 @AllArgsConstructor
  3. API 文档维护

    • 使用 @ApiIgnore 隐藏内部接口
    • 生产环境通过配置关闭 Swagger
  4. 事务管理

    • 只读操作:@Transactional(readOnly = true)
    • 明确指定回滚异常:rollbackFor = Exception.class

结语

合理使用注解能大幅提升开发效率与代码质量,但需结合项目需求与团队规范。建议在深入理解原理的基础上,灵活选择注解组合,避免过度设计。


http://www.kler.cn/a/560450.html

相关文章:

  • 音视频容器格式
  • Rust 中的引用循环与内存泄漏
  • 分享一个后端说异步导出,前端的实现方法
  • JVM生产环境问题定位与解决实战(三):揭秘Java飞行记录器(JFR)的强大功能
  • 先进制造aps专题三十 用免费生产排程软件isuperaps进行长期生产计划制定
  • FreiHAND (handposeX-json 格式)数据集-release >> DataBall
  • 如何将本地连接服务器中的文件内容复制到本机的剪贴板
  • 具有快慢思考的语言调节机器人操作
  • 【JavaEE进阶】Spring Boot配置文件
  • 世优科技国内首家 MR 体验店开业,打造 MAS 任意门奇幻之旅
  • 2025年2月科技热点深度解析:AI竞赛、量子突破与开源革命
  • 19-找出字符串中第一个匹配项的下标
  • 拓扑排序的核心算法:BFS应用与实践
  • 国内主流 AI 能力特点对比
  • 2022年全国职业院校技能大赛网络系统管理赛项模块A:网络构建(样题4)-网络部分解析-附详细代码
  • clickhouse--表引擎的使用
  • 使用S32DS部署Tensorflow lite到S32K3
  • 开源基准测试模拟器:BlueROV2 水下机器人的控制
  • python绘图之swarmplot分布散点图
  • 法线向量在3D机器视觉中的应用