AOP面向切面
1. 什么是AOP
AOP(Aspect Oriented Programming)面向切面编程,是对OOP面向对象编程的补充,它提供了模块化。在OOP中,关键的是单元是对象,AOP的关键单元是切面,或者说关注点。可以简单的理解为,OOP是针对核心的集中业务,AOP是针对非核心的分散的切面业务,例如事务管理、权限、日志、安全等。
2. AOP的核心理念
3. 切入点表达式
1). bean(bean的ID) 按照指定的bean名称拦截用户的请求,之后执行通知方法. 只能匹配单个bean对象
2).within(包名.类名) 可以按照类通配的方式去拦截用户的请求. 控制粒度较粗.
3).execution(返回值类型 包名.类名.方法名(参数列表)) 方法参数级别 控制粒度较细
4).@annotation(包名.注解名称) 按照注解的方式去拦截用户请求.
4. 通知方法
1.前置通知(Before Advice): 主要在 目标方法执行之前执行
2.后置通知(After Advice): 在目标方法执行之后执行
3.异常通知(After Throwing Advice): 在目标方法执行的过程中报了异常之后执行.
4.返回之后通知(After Retuning Advice): 在连接点正常结束之后执行.
上述的通知方法,无法控制目标方法是否执行.所以一般"只做记录不做改变"
5.环绕通知(Around Advice): 一般采用环绕通知 实现对业务的控制.
5.AOP代理
6.连接点(Joint Point)和切入点(Point cut)是什么?
1.连接点是程序执行的一个点。一个连接点总是代表一个方法执行,例如一个方法的执行或者一个异常的处理。
2.切入点是一个匹配连接点的断言或者表达式。Advice与切入点表达式相关联,并在切入点匹配的任何连接点处运行。由切入点表达式匹配的连接点的概念是AOP的核心。Spring默认使用AspectJ切入点表达式语言。
面试官一问:是编译时期进行织入,还是运行期进行织入?
---->运行期,生成字节码,再加载到虚拟机中,JDK是利用反射原理,CGLIB使用了ASM原理。
面试官再问:初始化时期织入还是获取对象时织入?
----》初始化的时候,已经将目标对象进行代理,放入到spring 容器中
面试官再再问:spring AOP 默认使用jdk动态代理还是cglib?
-----》要看条件,如果实现了接口的类,是使用jdk。如果没实现接口,就使用cglib。
面试官问:spring AOP 和 AspectJ的关系?
1、两者都是为了实现AOP这个目的,而出现的技术,spring aop 参考 AspectJ编程风格
—》这里有个故事就是,原本spring aop 初期的时候所用的编程风格,让人用起来,很不方便,而且让人看不懂。后来,spring aop 就开始取用了Aspectj的编程风格去进行编程
本文地址:https://blog.csdn.net/weixin_46621094/article/details/107620682
上一篇: 线程的创建与基本方法的使用