Closed fqdeng closed 1 year ago
这种方式无法解决cglib代理的方法
@zhaoyuguang cglib不是生成子类吗
@zhaoyuguang 我测试过了,,能够修复 @LTS
跟 @JobRunnerItem
无法被扫描到的问题,,希望修复
@qq254963746
@hongliangpan @lusong1986
@inherited有时候不好使 后Application启动 需要增加 @EnableAspectJAutoProxy(exposeProxy = true) //是否启用 代理 默认false 增加此处@LTS @JobRunnerItem 生效 可能各自环境不一样
@qdliurui 关闭aop代理不好吧,
@jonwinters 目前没有增加@enableaspectjautoproxy(exposeProxy = true) :修改源码JobRunnerHolder对addLTSBean做了个静态判断。最好是用@inherited的继承方式使注解生效。
@qdliurui 有分支吗,我参考一下。
问题已经解决了 给@LTS 加上@Inherited 注解 @Inherited 对方法不生效 所以@JobRunnerItem不用加
修改为
使用spring core自带的 findAnnotation方法,这个方法的实现,不仅会在自身的类的方法上搜索注解 同时会在父类跟接口的方法上搜索注解
另外希望lts 早点有人来接手维护
@qdliurui
AnnotationUtils.findAnnotation 实现原理可以说一下么 @jonwinters
@zhaoyuguang 这个是Spring Core包下的工具类,Spring自身有大量的地方使用 CGLib 实现,这个方法的原理 注释上有说明
这个方法会遍历input 这个方法的 super method CGLib是生成子类实现,所以能找到Annotation
部分Bean 加上@Transactional注解 会生成子类,子类的实例无法被扫描到, 测试加上@Inherited 可解决这个问题