首先,理解一下织入:
AOP在被通知对象执行前,会创建代理对象,AOP的切面逻辑会被织入切面之中,生成代理对象,这个过程叫做织入。
但是什么代理对象?
我的理解是,目标Bean自身,加上切面中逻辑,spring帮你一起打包,生成了一个新的对象,这样,在切面运行之前,或之后,原来的bean是不变的,就应该是这样。
其中代理是怎么实现的?
如果目标类是一个接口,那么spring会生成一个类,实现必要的接口,织入通知。。
如果目标类不是一个接口,那么spring会生成这个类的子类,这就是关键,因此,若目标类不是一个接口,那么,spring是不能给一个final方法发送通知的。因为final方法不能有子类。