服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

aop概念

让我们从定义一些重要的aop概念开始。这些术语不是spring特有的。不幸的是,spring的术语 不是特别地直观。而且,如果spring使用自己的术语,这将使人更加迷惑。

  • 方面(aspect): 一个关注点的模块化,这个关注点实现可能 另外横切多个对象。事务管理是j2ee应用中一个很好的横切关注点例子。方面用spring的 advisor或拦截器实现。

  • 连接点(joinpoint): 程序执行过程中明确的点,如方法的调 用或特定的异常被抛出。

  • 通知(advice): 在特定的连接点,aop框架执行的动作。各种类 型的通知包括“around”、“before”和“throws”通知。通知类型将在下面讨论。许多aop框架 包括spring都是以拦截器做通知模型,维护一个“围绕”连接点的拦截器 链。

  • 切入点(pointcut): 指定一个通知将被引发的一系列连接点 的集合。aop框架必须允许开发者指定切入点:例如,使用正则表达式。

  • 引入(introduction): 添加方法或字段到被通知的类。 spring允许引入新的接口到任何被通知的对象。例如,你可以使用一个引入使任何对象实现 ismodified接口,来简化缓存。

  • 目标对象(target object): 包含连接点的对象。也被称作 被通知被代理对象。

  • aop代理(aop proxy): aop框架创建的对象,包含通知。 在spring中,aop代理可以是jdk动态代理或者cglib代理。

  • 织入(weaving): 组装方面来创建一个被通知对象。这可以在编译时 完成(例如使用aspectj编译器),也可以在运行时完成。spring和其他纯java aop框架一样, 在运行时完成织入。

各种通知类型包括:

  • around通知: 包围一个连接点的通知,如方法调用。这是最 强大的通知。aroud通知在方法调用前后完成自定义的行为。它们负责选择继续执行连接点或通过 返回它们自己的返回值或抛出异常来短路执行。

  • before通知: 在一个连接点之前执行的通知,但这个通知 不能阻止连接点前的执行(除非它抛出一个异常)。

  • throws通知: 在方法抛出异常时执行的通知。spring提供 强类型的throws通知,因此你可以书写代码捕获感兴趣的异常(和它的子类),不需要从throwable 或exception强制类型转换。

  • after returning通知: 在连接点正常完成后执行的通知, 例如,一个方法正常返回,没有抛出异常。

around通知是最通用的通知类型。大部分基于拦截的aop框架,如nanning和jboss4,只提供 around通知。

如同aspectj,spring提供所有类型的通知,我们推荐你使用最为合适的通知类型来实现需 要的行为。例如,如果只是需要用一个方法的返回值来更新缓存,你最好实现一个after returning 通知而不是around通知,虽然around通知也能完成同样的事情。使用最合适的通知类型使编程模型变 得简单,并能减少潜在错误。例如你不需要调用在around通知中所需使用的的methodinvocation的 proceed()方法,因此就调用失败。

切入点的概念是aop的关键,使aop区别于其它使用拦截的技术。切入点使通知独立于oo的 层次选定目标。例如,提供声明式事务管理的around通知可以被应用到跨越多个对象的一组方法上。 因此切入点构成了aop的结构要素。

扫描关注微信公众号