1. JeecgBoot注解体系概述
作为国内流行的企业级快速开发平台,JeecgBoot基于SpringBoot深度封装了一套高效的注解体系。这些注解在简化开发流程、规范代码结构方面发挥着关键作用。我在实际项目中使用JeecgBoot三年多,深刻体会到合理运用这些注解能提升至少30%的开发效率。
平台注解主要分为三大类:基础功能注解(如权限控制)、数据操作注解(如自动填充字段)、前后端交互注解(如参数转换)。掌握这些注解的使用场景和实现原理,是高效使用JeecgBoot的基础。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心功能注解详解
2.1 权限控制注解
@RequiresRoles和@RequiresPermissions是Shiro框架的核心注解,JeecgBoot对其进行了增强封装:
java复制@RequiresRoles("admin") // 要求admin角色
@RequiresPermissions("user:add") // 需要user:add权限
public void addUser(User user) {
// 业务逻辑
}
实际开发中需要注意:
- 权限字符串建议采用
模块:操作的命名规范 - 多个权限可用逗号分隔,如
@RequiresPermissions("user:add,user:edit") - 注解可加在类或方法上,方法级注解会覆盖类级注解
2.2 数据字段自动填充注解
@TableField是MyBatis-Plus的字段注解,JeecgBoot扩展了其自动填充功能:
java复制public class User {
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
}
实现自动填充需要配置MetaObjectHandler:
java复制@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "createTime", Date.class, new Date());
}
@Override
public void updateFill(MetaObject metaObject) {
this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date());
}
}
3. 前后端交互注解
3.1 参数接收注解
@RequestParam和@PathVariable是Spring基础注解,JeecgBoot中常用作REST接口参数接收:
java复制@GetMapping("/user/{id}")
public Result<User> getUser(
@PathVariable Integer id,
@RequestParam(required = false, defaultValue = "1") Integer pageNo) {
// 业务逻辑
}
对于下划线参数名转驼峰变量名的情况,推荐使用@JsonProperty:
java复制public class UserQuery {
@JsonProperty("user_name")
private String userName;
}
3.2 参数校验注解
JeecgBoot结合Hibernate Validator提供参数校验支持:
java复制public class UserDTO {
@NotBlank(message = "用户名不能为空")
@Length(min = 2, max = 20, message = "用户名长度2-20位")
private String username;
@Email(message = "邮箱格式不正确")
private String email;
}
在Controller中使用@Valid触发校验:
java复制@PostMapping("/save")
public Result saveUser(@Valid @RequestBody UserDTO user) {
// 业务逻辑
}
4. 缓存与AOP相关注解
4.1 缓存注解@Cacheable
java复制@Cacheable(value = "userCache", key = "#id")
public User getUserById(Integer id) {
// 查询数据库
}
常见问题及解决方案:
- 缓存失效:检查Redis配置和key生成策略
- 脏数据问题:配合
@CacheEvict使用 - 序列化异常:配置正确的Redis序列化器
4.2 AOP切面注解
@Log是JeecgBoot提供的操作日志注解:
java复制@Log(title = "用户管理", businessType = BusinessType.INSERT)
public void addUser(User user) {
// 业务逻辑
}
AOP失效的常见原因:
- 注解方法被同类其他方法调用(需通过代理对象调用)
- 切面表达式配置错误
- Spring AOP不支持private方法
5. 代码生成器相关注解
JeecgBoot代码生成器依赖以下注解识别表结构:
java复制@Table(name = "sys_user")
public class User {
@TableId(type = IdType.AUTO)
private Integer id;
@Column(name = "user_name")
private String username;
}
代码生成器查不到表的排查步骤:
- 检查数据库连接配置
- 确认表是否有主键
- 检查表名是否包含特殊字符
- 确认数据库用户是否有查询权限
6. 注解使用最佳实践
- 命名规范统一:权限字符串、缓存key等保持统一命名风格
- 合理使用组合注解:如
@RestController = @Controller + @ResponseBody - 注意注解继承性:类级别注解通常会被方法继承
- 性能考量:反射操作的注解避免过度使用
- 文档注释:自定义注解必须包含完整JavaDoc
对于JeecgBoot和若依的选择,从注解体系角度看:
- JeecgBoot注解更偏向业务快速开发
- 若依的注解设计更接近原生Spring风格
- 根据团队技术栈和项目需求选择更合适的框架
在大型项目中,我通常会建立内部注解使用规范文档,明确规定各种注解的使用场景和限制条件,这对保持代码风格统一非常有帮助。
