SpringAOP底层是基于动态代理技术来实现的,在程序运行的时候会自动地基于动态代理技术,为这个目标对象生成一个对应的代理对象。在这个代理对象当中就会对目标对象当中的原始方法进行功能的增强,增强的逻辑就是我们定义的通知。首先在方法运行开始之前,先记录方法运行的开始时间,然后接下来再来调用原始的方法执行,对于下面的实例图来说原始的方法就是list()方法,那接下来在代理对象当中,就会来执行原始的list()方法当中的逻辑。原始方法运行完毕之后,接下来再来记录方法运行的结束时间,最后再来统计方法执行的耗时。最终在程序运行的时候,在注入的时候就不再注入的是这个目标对象,而注入的是这个代理对象。最终在调用list()方法的时候,其实调用的就是代理对象当中的list()方法,而这个list()方法已经进行了功能的增强。
一旦我们进行了AOP程序的开发,最终运行的就不再是原始目标对象,而是基于目标对象生成的代理对象。