fxleyu / cu-cafes

This is a repository of Java. And CU is a cafes unders downstairs.
2 stars 0 forks source link

[自己的无知] 在 AOP 中使用模板方法导致的坑 #63

Open fxleyu opened 6 years ago

fxleyu commented 6 years ago

背景

在做代码重构时,使用责任链和模板方法来处理打标逻辑。出现了设置的后续处理器为 null 的问题。 打印设置逻辑,确认设置了后续处理器。

fxleyu commented 6 years ago

解决线索

在处理器的虚拟类中对设置后续处理器方法内打印 log,发现了如下 log 信息:

2018-09-12 09:23:24 WARN - rk.aop.framework.CglibAopProxy - Unable to proxy method [public final void com.jd.app.server.individuation.service.mark.impl.handler.MarkingHandler.handleMarking(com.jd.app.server.individuation.domain.ware.WareInfo,com.jd.app.server.individuation.service.mark.MarkingCommonParam,com.jd.app.server.individuation.service.mark.MarkingWareParam)] because it is final: All calls to this method via a proxy will be routed directly to the proxy. - 259

解决思路

把模板方法中 final 方法设置为非 final 方法。