
一、 核心业务与架构层注解1. AOP 与自动填充相关注解为了避免每次新增或修改数据时都手动去写setCreateTime、setUpdateUser等重复代码项目使用了自定义注解结合 AOP 实现自动填充。AutoFill自定义注解标注在 Mapper 方法上。例子AutoFill(value OperationType.INSERT)标在void insert(Employee employee);上告诉切面这是一个新增操作切面会自动把创建时间、创建人塞进employee对象里。Target 和 Retention元注解定义 AutoFill 的行为。例子Target(ElementType.METHOD)限制它只能用在方法上Retention(RetentionPolicy.RUNTIME)保证运行时能被 AOP 反射读取到。Aspect 和 Pointcut定义切面和切入点。例子Pointcut(annotation(com.sky.annotation.AutoFill))精准拦截所有带有 AutoFill 注解的方法触发自动填充逻辑。2. 缓存相关注解 (Spring Cache)结合 Redis 实现声明式缓存减少数据库查询压力。EnableCaching开启缓存功能。例子写在启动类SkyApplication上相当于打开了整个项目的缓存开关。Cacheable查缓存没有才查库。例子Cacheable(cacheNames userCache, key #userId)标在查询用户的方法上先从 Redis 找userCache::1找不到再去查数据库。CacheEvict删缓存保证数据一致。例子CacheEvict(cacheNames userCache, key #userId)标在修改用户的方法上数据一改立马把 Redis 里的旧缓存删掉。3. 定时任务注解 (Spring Task)处理超时未支付等后台自动任务。EnableScheduling开启定时任务。例子写在启动类上。Scheduled定义执行频率。例子Scheduled(cron 0 * * * * ?)标在checkOrderStatus方法上表示每分钟执行一次检查有没有超时的订单。二、 Web 接口与交互层注解1. 接口文档生成注解 (Swagger / Knife4j)自动生成接口文档方便前后端对接。Api 和 ApiOperation描述接口。例子Api(tags 员工管理)标在EmployeeController上ApiOperation(value 新增员工)标在save方法上。ApiModel 和 ApiModelProperty描述实体字段。例子在EmployeeDTO类上写ApiModel(员工DTO)在name字段上写ApiModelProperty(员工姓名)这样文档里就会显示中文说明。2. 请求处理与参数绑定注解接收前端传来的各种数据。RestController 和 RequestMapping声明控制器和基础路径。例子RestControllerRequestMapping(/admin/employee)标在类上表示所有接口都以/admin/employee开头。PostMapping / GetMapping 等映射具体请求。例子PostMapping标在save方法上处理 POST 请求。RequestBody解析 JSON 数据。例子save(RequestBody EmployeeDTO employeeDTO)Spring MVC 会自动把前端传来的 JSON 字符串变成EmployeeDTO对象。PathVariable提取 URL 路径参数。例子getById(PathVariable Long id)自动提取/admin/employee/1中的1。RequestParam提取查询字符串参数。例子page(RequestParam int page, RequestParam int pageSize)接收?page1pageSize10这种参数。三、 数据持久层注解 (MyBatis)Mapper声明数据访问接口。例子Mapper标在EmployeeMapper接口上Spring 启动时会自动为它生成代理类并注入到容器中。Select / Insert 等直接写 SQL。例子Select(SELECT * FROM employee WHERE id #{id})标在方法上省去写 XML 文件的麻烦。四、 基础与通用注解Service / Autowired依赖注入。例子Service标在EmployeeServiceImpl上Autowired private EmployeeMapper employeeMapper;自动把 Mapper 注入进来。Slf4j日志打印。例子标在类上后可以直接用log.info(新增员工成功);不用手动new一个 Logger。Data简化实体类。例子标在Employee类上Lombok 自动生成所有的 Getter、Setter、toString 方法