Aop面向切面编程,在Spring中,通过配置切面类和切点,切面类中主要有前置通知方法,后置通知方法,异常通知方法以及环绕通知方法,切面类中的方法的逻辑就是你要织入代码的逻辑,然后你需要判断哪些类需要进行前面切面,所以就要配置切入点,可以使用xml方式,也可以使用注解的方法。
实现方式主要是通过动态代理给目标类生成代理对象,如果目标类实现了接口就使用jdk代理,如果没有实现接口使用cglib代理,如果配置了优先级,则默认使用cglib代理。
在spring容器启动后,就会去扫描哪些需要进行aop的类,这些类有哪些切面(切面是可以配置多个的),然后给目标类的每个方法都绑定一个相应的执行链,并放入到一个map中,当你调用时,会走代理类,然后通过索引加递归的方式去调用切面类前置通知方法,目标类方法,后置通知方法这样的顺序去调用。
使用:可以拦截目标类,在方法的前后织入日志打印逻辑,包括Spring事务开启也是使用的aop,还有动态数据源切换等场景都是可以使用aop。如果配置多个切面,则要指定执行顺序,通过设置sort的大小来指定,sort值越小,越先执行,越后结束,sort值越大,越后执行,越先结束,就相当于一个同心圆。事务sort值默认是int类型的最大值。