同类中不带注解的调用带注解的方法,注解失效?

正好工作中遇到的问题,在这里记录。

一、问题背景:

自定义的注解,在方法拦截器中进行拦截,必须在同类实行嵌套调用,而且不能改动调用方式。

上层方法的调用:

二、内部逻辑:

大家都知道,想让注解生效,根据spring的原理,必须使用代理对象去调用带注解的方法,而同类方法调用,类似this调用,this是当前对象,从而导致注解失效。

所以问题就变为:让this成为代理对象。this又从哪里来呢?this代表当前对象,即userServiceCry,可userServiceCry的代理对象和目标对象(target对象)是分开的(这是因为spring是通过cglib实现代理的)。

userServiceCry对象在走完代理内容之后,就会把原始对象传递回来赋值给this,根据事务的传递性,我们必须让userServiceCry将代理对象传递给this。
这时候我们再来看看,代理对象调用方法的流程。
方法拦截器:

代理对象最终会走进MethodInterceptor接口的实现类的intercept方法中,走完这个拦截方法,就会把原始对象传过去,去走方法的实现体。

此时我们把代理对象传过去就可以啦。

三、结语:
记住一定要调用invokeSuper方法,而不是invoke方法。这涉及到代理类其实是原始的子类的问题,有兴趣的可以私信我。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

才华横溢caozy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值