- 什么是AOP
AOP(Aspect-Oriented Programming, 面向切面编程)和OOP一样,是一种编程范式,旨在通过将跨越应用程序的关注点模块化,提高代码的模块性、可维护性和可重用性
通俗的说就是用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为切面,以此来减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性
- Spring AOP and AspectJ AOP 有什么区别?AOP 有哪些实现方式?
- AOP实现的关键在于代理模式,AOP代理主要分为静态代理和动态代理,静态代理的代表为AspectJ;动态代理的代表为Spring AOP
- AspectJ是静态代理的增强,所谓静态代理,就是AOP框架会在编译阶段生成AOP代理类,因此也称为编译时增强,他会在编译阶段将切面织入到Java字节码中,运行的时候就是增强之后的AOP对象
- Spring AOP使用的动态代理,所谓的动态代理,就是说AOP框架不会去修改字节码,而是每次运行时在内存中临时为方法生成一个AOP对象,这个AOP对象包含了目标对象的全部方法,并且在特定的切点做了增强处理,并回调原对象的方法
- 解释一下Spring AOP里面的几个名词
- 切面(Aspect): 切面是通知和切点的结合。 在Spring AOP中,切面可以使用通用类或者在普通类中以 @AspectJ 注解来实
现 - 通知(Advice):在AOP术语中,切面的工作被称为通知(前置、后置、环绕、异常、返回)
- 连接点(Join point): 指方法,在Spring AOP中,一个连接点 总是 代表一个方法的执行。连接点是在应用执行过程中能够插
入切面的一个点。这个点可以是调用方法时、抛出异常时、甚至修改一个字段时。切面代码可以利用这些点插入到应用的正常流程之中,并添加新的行为 - 切入点: 切入点的定义会匹配通知所要织入的一个或多个连接点。我们通常使用明确的类和方法名称,或是利用正则表达式定义所匹配的类和方法名称来指定这些切点
- 目标对象: 也就是代理对象
- 织入: 织入是把切面应用到目标对象并创建新的代理对象的过程。
- 在Spring AOP 中,关注点和横切关注的区别是什么?(在 spring aop 中 concern 和 cross-cutting concern 的不同之处)
- 关注点(concern)是应用中一个模块的行为,一个关注点可能会被定义成一个我们想实现的一个功能。
- 横切关注点(cross-cutting concern)是一个关注点,此关注点是整个应用都会使用的功能,并影响整个应用,比如日志,安全和数据传输,几乎应用的每个模块都需要的功能。因此这些都属于横切关注点