Java教程

【Spring实战——面向切面的Spring】1.3 Spring对AOP的支持

本文主要是介绍【Spring实战——面向切面的Spring】1.3 Spring对AOP的支持,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

​ 并不是所有的AOP框架都是相同的,它们在连接点模型上可能有强弱 之分。有些允许在字段修饰符级别应用通知,而另一些只支持与方法 调用相关的连接点。它们织入切面的方式和时机也有所不同。但是无 论如何,创建切点来定义切面所织入的连接点是AOP框架的基本功 能。

​ 因为这是一本介绍Spring的图书,所以我们会关注Spring AOP 。虽然 如此,Spring和AspectJ项目之间有大量的协作,而且Spring对AOP的

支持在很多方面借鉴了AspectJ项目。

Spring提供了4种类型的AOP支持:

file

​ 前三种都是Spring AOP实现的变体,Spring AOP构建在动态代理基础 之上,因此,Spring对AOP的支持局限于方法拦截。

1.为什么放弃Spring经典Aop模型?

​ Spring经典的AOP看起来就显得非常笨重和过于复杂,直接使用 ProxyFactory Bean会让人感觉厌烦。但是现在Spring提供了更简洁和干净 的面向切面编程方式。

2.如何将纯POJO转哈为切面?

​ 引入了简单的声明式AOP和基于注解的AOP之 后, 借助Spring的aop命名空间,我们可以将纯POJO转换为切面。

3.这种方式有什么缺点?

​ 实际 上,这些POJO只是提供了满足切点条件时所要调用的方法。遗憾的是,这种技术需要XML配置,但这的确是声明式地将对象转换为切面的简便方式。

4.Spring借鉴Aspect切面是为了什么?

​ Spring借鉴了AspectJ的切面,以提供注解驱动的AOP 。

5.本质上是为了什么?

​ 本质上,它依 然是Spring基于代理的AOP ,但是编程模型几乎与编写成熟的AspectJ 注解切面完全一致。

6.Aop风格的好处?

这种AOP风格的好处在于能够不使用XML来完成 功能。

7.AOP需求超过简单的方法调用?

​ 如果你的AOP需求超过了简单的方法调用 (如构造器或属性拦截) , 那么你需要考虑使用AspectJ来实现切面。在这种情况下,上文所示的第四种类型能够帮助你将值注入到AspectJ驱动的切面中。

Spring AOP框架的一些关键知识。

file

Spring通知是Java编写的

file

Spring在运行时通知对象

​ 通过在代理类中包裹切面,Spring在运行期把切面织入到Spring管理 的bean中。

​ 下述图表明了什么?

1.代理类封装了目标类。
2.拦截被通知方法的调用。
3.把调用转发给真正的目标bean。  
4.当代理拦截到方法调用时, 在调用目标bean方法之前,会执行切面逻辑。

file
file

图4 .3 Spring的切面由包裹了目标对象的代理类实现。

1.Spring时如何创建代理对象?

代理类处理方法的调用,执行额外的切面逻辑,并调用目标方法直到应用需要被代理的bean时,Spring才创建代理对象。

2.如果使用的 是ApplicationContext的话,何时创建被代理的对象?

​ 在ApplicationContext从BeanFactory中加载所有bean的时候,Spring才会创建被代理的对 象。

3.这样做有什么好处?

​ 因为Spring运行时才创建代理对象,所以我们不需要特殊的编译 器来织入Spring AOP的切面。

Spring只支持方法级别的连接点

​ 使用各种AOP方案可以支持多种连接点模 型。

1.Spring支持方法连接点

​ 因为Spring基于动态代理,所以Spring只支持方法连接点。这与 一些其他的AOP框架是不同的,例如AspectJ和JBoss ,除了方法切点,它们还提供了字段和构造器接入点。

2.Spring对字段连接点的优缺点?

file

这篇关于【Spring实战——面向切面的Spring】1.3 Spring对AOP的支持的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!