本章节的动态代理增强了代理类中所有的实现方法

本章节的动态代理增强了代理类中所有的实现方法

// 这是我的公共接口
public interface ILang {
void use();

void test();
}
// 实现类
public class Eng implements ILang{
@Override
public void use() {
System.out.println("use English");
}

@Override
public void test() {
System.out.println("英文测试");
}
}

当我通过课程中JDK的动态代理实现方法增强后,两个方法都被增强了,这明显与springAOP中的增强不同,spring中只增强目标方法

问题描述:

我想深入的了解下spring它是怎么只增强目标方法呢

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕小班 2021-07-25 11:57:54

同学你好,1、使用代理类分别调用了两个方法,那就是对调用方法实现了增强。

通过代理类调用方法,实现了方法的增强,调用了几个方法就实现了对几个方法的增强。

http://img1.sycdn.imooc.com//climg/60fcdb2709f909d212680204.jpg

    2、spring-aop是怎么用基于JDK动态代理实现对目标方法的增强?

   在spring-aop中,参考课程中案例,在原始代码中调用了creatUser方法(而且接口UserService中有creatUser方法,所以每个实现类中都要实现creatUser方法)

http://img1.sycdn.imooc.com//climg/60fcdfd00915c9ba08650271.jpg

所以在对应在自动生成的代理类中,会对这个creatUser方法进行增强。

如上所示原理,使用代理类调用了这个方法,那就是对调用方法实现了增强,如果不想实现对它的增强,同学不使用代理类调用方法就可以,比如

http://img1.sycdn.imooc.com//climg/60fce13b090f80ba11390286.jpg

祝学习愉快~

好帮手慕小班 2021-07-22 18:05:04

同学你好,同学说的是在配置文件中,配置后只对目标方法增强吗?比如

http://img1.sycdn.imooc.com//climg/60f94269094d6c0e09760366.jpg

如果是,这里底层会执行正则表达式中的匹配到的目标方法。

如果同学想表达的不是这个意思,还麻烦同学具体描述一下自己的问题。

祝学习愉快~

  • 提问者 WittChen #1

    我不是贴出代码了吗,老师把我代码复制过去就知道什么意思了

    2021-07-22 19:34:39
  • 提问者 WittChen #2

    跟spring没关系,我只是讲jdk动态代理,老师要看清我在什么章节提出的问题哦

    2021-07-22 19:35:59
  • 好帮手慕小脸 回复 提问者 WittChen #3

    ​同学你好,

    1、问一下同学是不是使用代理类分别调用了两个方法。如果是,两个方法都增强是正常的

    2、如果不是,建议同学将代理类代码贴出,便于老师测试运行

    祝学习愉快~

    2021-07-23 11:40:27
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师