你的报错与需要学习的地方
Session.setAttribution(key,value)
Session.getAttribution(key), key别输错了F:\Cs_Learn\Java_Learn\Project\hm-dianping\src\main\java\com\hmdp\utils\LoginInterceptor.java:41 java: 需要class, interface或enum

2.Hutool轻量级工具库
- 语法不熟练—>mybatis / JSONUtil/ redis

Redis的””和java的””是不等值的
1.equals来比较string的内容
2.最好用””.equals(object),
因为object.equals(“”)的话必须判断object不为null
因为他到底是一个方法

==和equals的区别


intern常量池
事务生效的前提是调用者必须为spring代理对象
1.Spring 的事务是怎么加上的?
事务是通过 Spring AOP 加在方法上的。
Spring 启动时,会为带 @Transactional 的方法生成一个代理对象
(JDK 动态代理 / CGLIB)。当外部调用方法时,请求会先进入代理对象
→ 再进入事务逻辑(开启事务、提交、回滚)
→ 最后才执行你的目标方法。
2.什么情况下事务不会生效?
- 内部调用:如果你在类里面用 this.createVoucherOrder() 调用带事务的方法,
这个调用直接进入本类,不会走代理 → 事务就不会生效。 - final/private 方法:Spring AOP 无法代理 final 或 private 方法,也不会生效。
- 方法不是 public:默认基于代理的事务要求方法是 public。
3.为什么要 AopContext.currentProxy()
- AopContext.currentProxy() 就是拿到当前类的代理对象。
- 用代理对象去调 createVoucherOrder() → 就能触发事务切面。