Spring核心之AOP(面向切面编程)

既上次介绍了IOC之后,这次再整理下Spring的另外一个核心内容——面向切面编程(Aspect-Oriented Programming ,即AOP) 。

**AOP是什么?**我们先看下官方的定义:

Aspect-Oriented Programming (AOP) complements Object-Oriented
Programming (OOP) by providing another way of thinking about program
structure. The key unit of modularity in OOP is the class, whereas in
AOP the unit of modularity is the aspect. Aspects enable the
modularization of concerns such as transaction management that cut
across multiple types and objects. (Such concerns are often termed
crosscutting concerns in AOP literature.)

**翻译:**面向切面编程(AOP)可以通过类比面向对象编程(OOP)来理解。在OOP中模块化的核心单位是类;而在AOP中,核心的单位是切面。切面使事务管理等关注点的模块化得以实现,比如跨多个类型和对象的事务管理。

在定义中,有提到切面这个概念,到底什么事切面呢?除了切面外,我们还需要了解几个相关的概念:

**切面(Aspect):**Spring中的切面是通过类实现的,切面是一个或跨域多个类的关注点的模块化,是一个抽象;事务管理是企业Java应用程序中使用切面的一个很好的例子。

**连接点(Join Point):**在执行程序时的一个点,例如一个方法的执行或者一个异常的处理。

**切点(Point Cut):**切点会匹配通知所要织入的一个或者多个连接点。

**通知(Advice):**在特定连接点的切面上的响应。 目标对象(Target Object):由一个或多个切面提供通知的对象。也称为通知对象。由于Spring AOP是使用运行时代理实现的,所以这个对象将永远是一个代理对象。

**织入(Weaving):**将切面与其他应用程序类型或对象连接起来以创建新的代理对象的过程。这可以在编译时完成(例如,使用AspectJ编译器)、加载时间或运行时。与其他纯Java AOP框架一样,Spring AOP在运行时执行织入。

通知的类别:
  • 前置通知(before):在目标方法被调用之前调用通知功能。
  • 后置通知(after):在目标方法完成之后调用通知,此时不会关心方法的输出是什么。
  • 返回通知(after-returning):在目标方法成功执行之后调用通知。
  • 异常通知(after-throwing):在目标方法抛出异常之后调用通知。
  • 环绕通知(around):通知包裹了被通知的方法,在被通知的方法调用之前和调用之后执行自定义的行为。

看完上面这些内容,想必大家已经对AOP有个基本的认识了。

那么,AOP有什么用?

前面已经提到了,主要应用于企业Java应用程序中的事务管理,例如,登录校验,方法执行的权限校验等各种场景。

如何实现事务模块化的管理?
我们可以定义按模块来定义切面,例如对应模块的controller作为一个切面,也可以统一管理多个类中的方法,给定特定的前缀等;然后再结合其他来进行切面管理。

如何使用Spring的AOP?
这里只介绍比较常用的两种,完全通过XML配置的方式与通过XML简单配置与注解结合的方式。还有可以启用AspectJ的方式,这里不作介绍,有兴趣的可以自行了解下。
使用AOP,包括定义切面、切点、通知和连接点以及将它们联系起来。

完全通过XML配置:
这里写图片描述

通过XML简单配置与注解结合:
这里写图片描述
使用注解的方式还需要做的一部就是,在Spring的配置文件中,加入这段话(当然,配置文件中还要引入命名空间):

<aop:aspectj-autoproxy proxy-target-class=“true”/>

没接触过的朋友一下子有点蒙,它们关系如何理解,切点表达式怎么写;这两点再细讲一下:

切面、切点和通知的关系:
这里写图片描述

切点表达式:
这里写图片描述

本期对AOP的介绍暂时先写这么多,以后可能会整理下从源码的角度来理解AOP的内部原理,希望对AOP还不太了解的同鞋有所帮助。

如果有什么建议或意见,欢迎反馈,谢谢!
微信公众号

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值