你的报错与需要学习的地方

  1. Session.setAttribution(key,value)
    Session.getAttribution(key), key别输错了

  2. F:\Cs_Learn\Java_Learn\Project\hm-dianping\src\main\java\com\hmdp\utils\LoginInterceptor.java:41 java: 需要class, interface或enum
    e94e48946930dda82ea873d481f594062b38c1f3

2.Hutool轻量级工具库
ad9fd5fabcf53110f573461fa302a1de9f70428e

  1. 语法不熟练—>mybatis / JSONUtil/ redis
    f5555d3f5bb1e3896a0220ddf793b60e35517524

Redis的””和java的””是不等值的
cc1e63d3480f9750b9dd4f37cf29bf75287a001c

1.equals来比较string的内容

2.最好用””.equals(object),
因为object.equals(“”)的话必须判断object不为null
因为他到底是一个方法

dd8e735776cfbc1c597fc8c5f517686cf9292596

==和equals的区别

eb808fd3783a52dc1510c518cb5afdee1957ad28

744984f8d4782bdefd437c1a00f4b1b3990264d0


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() → 就能触发事务切面。