SpringAop:面向切面编程(Aspect Oriented Programming)提供了另一种角度来思考程序的结构,通过这种方式弥补面向对象编程(Object Oriented Programming)的不足。除了类以外,AOP提供了切面,切面对关注点进行模块化,例如横切多个类型和对象的事务管理(这些关注点术语通常称作横切(crosscutting)关注点)。Spring AOP是Spring的一个重要组件,但是Spring IOC并不依赖于Spring AOP,这意味着你可以自由选择是否使用AOP,AOP提供了强大的中间件解决方案,这使得Spring IOC更加完善。我们可以通过AOP来实现日志监听,事务管理,权限控制等等。
- 首先是SpringAop的初始化过程:
这里只要用到的类是AnnotationConfigApplicationContext 。
- 其次是SpringAop主要包括哪些方面:
上面的图切点表示的是一个方法里面的类,多个切点就组成了一个切面,而前面就是有增强(Advice)生成的。最后再织入到aop中。
- SpringAop底层实现:
- java动态代理 proxy(需要实现接口)。实现动态代理是通过 invoke方法,生成字节码文件。
- cglib (不需要实现接口)。
其中java动态代理的优先级高于cglib