代理类和被增强对象的关系
代理返回的应该是Proxy类型的引用,怎么说强转就强转了,Proxy Object 和 UserDao 三个类的关系到底是怎样的?
正在回答 回答被采纳积分+1
查了一晚上资料终于懂了,但是最后还有一个问题,麻烦老师看下:
整个动态代理的机制:
首先是 getClass 方法返回的是调用该方法对象的真实类型,也就是最下层的子类,所以
Proxy.newInstance方法的第一个参数其实是代理对象的真实类型.
Proxy.newInstance方法的第二个参数传入的是接口,所以使用jdk动态代理的对象,他的真实类型必须是实现接口的一个类,最终这个动态生成的代理类会声明实现这些接口,之后生成这个代理类的代理对象,因为他实现了上述接口,所以他可以向上转化成其中的一个接口,并且可以调用这些接口里面的方法.本次例子因为返回值为Object类型,所以需要强制类型转化.
但是在代理对象proxy调用接口的方法的时候,
由于多态,他会调用代理类实现的接口方法,又由于设置了InvocationHandler,会调用这个 InvocationHandler对象所实现的invoke方法,也就是切入点Pointcut被拦截,执行通知Advice,在本次的例子当中,就是在invoke方法对userDao的增删改查进行了调用,当然,最终调用的还是UserDaoImpl实现类中的增删改查方法.
至于为什么调用代理类方法的时候会去调用InvocationHandler对象所实现的invoke方法,我就不知道了.
能解答一下吗?
相似问题
登录后可查看更多问答,登录/注册
- 参与学习 人
- 提交作业 205 份
- 解答问题 4317 个
Java中非常实用的SSM整合开发内容,从Spring开始,到MyBaits的进阶内容,再到SpringMVC的应用,最后是SSM整合开发案例,逐步深入,助你成长为一名Java工程师!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星