Discuss / Java / 学习中的疑惑

学习中的疑惑

Topic source

蛇皮_-

#1 Created at ... [Delete] [Delete and Lock User]

对于这个类:  

UserService$$EnhancerBySpringCGLIB

它继承了UserService ,因此它想调用 UserService 的方法时,完全可以用:  

super.method();

这种形式啊,为什么要存原始的实例再用:  

target.method();

请老师解答一下


最近碰到了 aop 自调用时不执行切面逻辑的问题,如果内部实现是 super 种的话,感觉切面就不会失效了

593cX4

#2 Created at ... [Delete] [Delete and Lock User]

但是继承来的父类字段都没有初始化呀,调用`super.method()`不还是会出现空指针错误;

只有target里面的字段是被初始化过的

廖雪峰

#3 Created at ... [Delete] [Delete and Lock User]
UserService us = new UserService(); // 这是你的UserService
UserService proxy = new UserService$$EnhancerBySpringCGLIB(us); // 这是Proxy

proxy内部调super,这个super不是us实例

你仔细复习proxy模式,proxy内部持有target,他自己的super毫无意义

一语惊醒铁憨憨。自己内部持有一份父类的实例,而且另外还有一套继承的super成员变量和方法。


  • 1

Reply