Closed xiongmaodeguxiang closed 8 months ago
我没有看懂,哪个名字写错了?
我理解advisor.setAdviceBeanName()这个方法中设置的应该是advice的name吧,就是JetCacheInterceptor这个bean的名字
当然,您已经执行了advisor.setAdvice(jetCacheInterceptor),所以advice已经不为空了,所谓我理解您再指定adviceBeanName也没有意义了
这代码好多年了我也不太记得,但我的理解是需要指定一个非默认的名字,否则如果有多个advisor呢?
或者你的意思是advisor.setAdviceBeanName(CacheAdvisor.CACHE_ADVISOR_BEAN_NAME);这一行是多余的?
哈哈,大佬,我也是最近在研读学习您的代码,梳理一下逻辑,对您很是敬佩。
2.是的,advisor.setAdviceBeanName(CacheAdvisor.CACHE_ADVISOR_BEAN_NAME);这一行就多余了 因为您的代码中执行了advisor.setAdvice(jetCacheInterceptor); 具体的逻辑在org.springframework.aop.support.AbstractBeanFactoryPointcutAdvisor#getAdvice方法中, 逻辑大概是如果你设置了advice了那么就直接返回advice,如果没有设置,那么它会从spring中获取您指定的adviceBeanName的bean作为advice
不过是个小问题而已,不太影响什么
那可以把这一行删掉试试单元测试是否还能跑通
我把这一行删除后,项目是可以正常跑通的
CacheAdvisor继承了AbstractBeanFactoryPointcutAdvisor类,而类中有如下代码: ` Advice advice = this.advice; if (advice != null) { return advice; }
我认为adviceBeanName的本意是如果CacheAdvisor没有设置advice时会查找容器中名为adviceBeanName的bean作为Advice,但是坐着指定的名字advisor.setAdviceBeanName(CacheAdvisor.CACHE_ADVISOR_BEAN_NAME); 这个CACHE_ADVISOR_BEAN_NAME是CacheAdvisor的名字。 因为作者指定了Advie所以设置adviceBeanName是啥已经不重要了,但是这块代码中的写一个错的名字还是有些不舒服,不知道作者有没有兴趣修复一下,嘿嘿