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

  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
    image1

2.Hutool轻量级工具库
image2

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

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

1.equals来比较string的内容

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

image5

==和equals的区别

image6

image7


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