我分成实体类 和Spring 业务类两种,清清楚楚、绝不混淆。
一、实体类
用注解:
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private Long id;
private String nickName;
private String phone;
}
作用:
@Data:生成 getter、setter、toString、equals、hashCode@NoArgsConstructor:无参构造(MyBatis/JSON 必须要)@AllArgsConstructor:全参构造(方便 new 对象)特点:
- 用于和数据库表对应的类
- 数据需要读取、修改、传递
- 不需要构造器注入
- 字段不加 final(因为值会变)
二、Spring 业务类(@Service / @Controller / @Component 工具)
用注解:
@RequiredArgsConstructor
Service 类示例
@Service
@RequiredArgsConstructor
public class VoucherOrderServiceImpl extends ServiceImpl<...> {
private final ISeckillVoucherService seckillVoucherService;
private final RedisLock redisLock;
private final RedisIdWorker redisIdWorker;
// 方法...
}
工具类示例
@Component
@RequiredArgsConstructor
public class RedisLock {
private final StringRedisTemplate stringRedisTemplate;
// 方法...
}
作用:
- 只给 final 修饰的字段 自动生成构造器
- Spring 自动完成构造器注入
- 安全、规范、官方推荐
特点:
- 用于服务、控制器、工具类
- 注入的依赖永远不会改,所以加 final
- 绝对不用 @Data(不需要 getter/setter)
三、快捷键直接生成构造器
1、先写好成员变量
private final StringRedisTemplate stringRedisTemplate;
2、把光标放到这行下面,按快捷键:
Windows / Linux :Alt + Insert
3、弹出菜单选择:Constructor(构造器)
4、勾选 stringRedisTemplate → OK自动就出来了:
public RedisLock(StringRedisTemplate stringRedisTemplate) {
this.stringRedisTemplate = stringRedisTemplate;
}