light-task-scheduler icon indicating copy to clipboard operation
light-task-scheduler copied to clipboard

修复spring使用CGLib做代理时,@LTS @JobRunnerItem 等注解无法被解析的问题

Open fqdeng opened this issue 7 years ago • 13 comments

部分Bean 加上@Transactional注解 会生成子类,子类的实例无法被扫描到, 测试加上@Inherited 可解决这个问题

fqdeng avatar Jan 06 '18 05:01 fqdeng

这种方式无法解决cglib代理的方法

zhaoyuguang avatar Jan 16 '18 12:01 zhaoyuguang

@zhaoyuguang cglib不是生成子类吗

fqdeng avatar Jan 16 '18 13:01 fqdeng

@zhaoyuguang 我测试过了,,能够修复 @LTS@JobRunnerItem 无法被扫描到的问题,,希望修复

fqdeng avatar Mar 08 '18 06:03 fqdeng

@qq254963746

fqdeng avatar Mar 08 '18 06:03 fqdeng

@hongliangpan @lusong1986

fqdeng avatar Mar 09 '18 06:03 fqdeng

@inherited有时候不好使 后Application启动 需要增加 @EnableAspectJAutoProxy(exposeProxy = true) //是否启用 代理 默认false 增加此处@LTS @JobRunnerItem 生效 可能各自环境不一样

qdliurui avatar Apr 23 '18 02:04 qdliurui

@qdliurui 关闭aop代理不好吧,

fqdeng avatar Apr 23 '18 03:04 fqdeng

@jonwinters 目前没有增加@enableaspectjautoproxy(exposeProxy = true) :修改源码JobRunnerHolder对addLTSBean做了个静态判断。最好是用@inherited的继承方式使注解生效。

qdliurui avatar Apr 23 '18 03:04 qdliurui

@qdliurui 有分支吗,我参考一下。

fqdeng avatar Apr 23 '18 03:04 fqdeng

问题已经解决了 给@LTS 加上@Inherited 注解 @Inherited 对方法不生效 所以@JobRunnerItem不用加

修改为 image

使用spring core自带的 findAnnotation方法,这个方法的实现,不仅会在自身的类的方法上搜索注解 同时会在父类跟接口的方法上搜索注解

image

image

另外希望lts 早点有人来接手维护

fqdeng avatar Jun 15 '18 22:06 fqdeng

@qdliurui

fqdeng avatar Jun 15 '18 22:06 fqdeng

AnnotationUtils.findAnnotation 实现原理可以说一下么 @jonwinters

zhaoyuguang avatar Jul 12 '18 06:07 zhaoyuguang

@zhaoyuguang 这个是Spring Core包下的工具类,Spring自身有大量的地方使用 CGLib 实现,这个方法的原理 注释上有说明

image

这个方法会遍历input 这个方法的 super method CGLib是生成子类实现,所以能找到Annotation

fqdeng avatar Jul 12 '18 07:07 fqdeng