代理对象地址值问题新思考
代理对象地址值问题新思考
问题回顾:
为userService找的代理对象proxy,打印的地址值与userService一样!!!
UserService类:
ProxyFactoryByJDK代理类:
UserTest测试类:
控制台打印:
动态代理对象时运行时期动态创建的代理对象,和目标对象那不是用一个对象。对于这一点,== 与 equals 都为fasle已经给出了证据。那么为什么直接打印,目标对象和proxy对象内容完全相等呢?
首先,直接打印一个对象,实际上是调用对象的toString方法!!!
toString()和上面控制台的输出一对比,不难发现,proxy输出打印的其实是userService的toString()返回值字符串。
为了证明,重写UserService的toString()
控制台打印:
重写UserService的toString()后,直接打印proxy输出的也是UserService的toStirng()返回值,证明直接打印proxy,前置增强和后置增强都打印,实际上是调用目标对象的toString(),其实就是对toString()的增强。
调用目标对象的toString(),其实就是对toString()的增强。