关于方法中的this参数

关于方法中的this参数

public Object createProxy() {
    Object proxy = Proxy.newProxyInstance(userDao.getClass().getClassLoader(), userDao.getClass().getInterfaces(), this
    );
    return proxy;
}

我想问一下这里面的this,我理解的情况是这个this是调用处理器这个接口的实例吗,那这个this是怎么关联到调用处理器类的呢?又或者是,继承这个接口类的目的就是为了接口类里面的invoke方法吧,所以这个this指代的就是这段代码所在的类也就是课程中的MyJdkProxy,然后底层实现会自动在MyJdkProxy类里面寻找invoke方法。

正在回答

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

1回答

同学你好!

  1. 关于this是什么的问题,可以在代码中打断点看一下,很显然就是MyJdkProxy对象

    http://img1.sycdn.imooc.com//climg/5e16f3630960384213030317.jpg

  2. 关于在调用方法时,是如何触发invoke方法的,同学可以按以下思路理解:

    1)在获取到proxy时,在proxy中代理这个接口中的invoke方法。

    http://img1.sycdn.imooc.com//climg/5e16f72609a0a82204820128.jpg

    2)当调用其中的一个方法时,比如:save方法。除了会调用save方法还会隐式(不需要手动调用)调用invoke方法

    http://img1.sycdn.imooc.com//climg/5e16f79409ef736704230187.jpg

  3. 如果同学想知道proxy是如何完成这一系列操作的,需要阅读以下Proxy这个类的源码了

    http://img1.sycdn.imooc.com//climg/5e16f81009c3446304590134.jpg

  4. 因此同学这里只需要知道调用方法时,也会调用invoke方法就可以。知道怎么用就可以。

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

  • 如果this的地方写的是InvocationHandler的实例,也就是用内部类的方式,那this的位置不就是InvocationHandler类对象了吗,那么总的来说两种方法的目的都是为了实现Invoke方法是吗,只是实现方法略有不同,this这个位置不一定要是哪一个对象
    2020-01-09 19:59:12
  • 是的,同学理解的是对的。祝学习愉快。
    2020-01-10 14:20:49
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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