为了账号安全,请及时绑定邮箱和手机立即绑定

【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

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消