先写一个动态代理实现 1.写接口类 2.写真实对象,真实对象实现上面的接口 3.写代理类,实现InvocationHandler接口,并重写invoke方法 输出结果如下 看b.work3()的输出,只有work3通过代理对象(proxy)调用,所以“加入些额外的功能” 在work3()方法里面的wor1()和work2调用,其实是通过this(代表真实对象)调用的。 this.wor1(),this.work2代表的是真实对象的调用 结论:只有代理对象调用的方法才会被代理增强新功能 真实对象调用的方法不会被代理增强新功能 扩展:spring中的事务,为什么再同一类中方法调用同一个类中的另外一个方法回失效? 如上图:insert方法中调用insert2(),无论insert2的事务隔离级别定义的是哪一种,insert2的事务都会失效, insert2只会被当作insert中的执行代码块 原因:spring的事务是通过AopProxy实现的,底层用的是jdk的动态代理,insert2()方法的调用是通过this,而不是代理类,所以增强功能失效 怎么解决呢?请看我的另一篇文章 来源: 51CTO 作者: qq5e5f48e3af387 链接: https://blog.51cto.com/14743302/2483044