AOP面向方面编程

   AOP是OOP的延续,是Aspect Oriented Programming的缩写,意思是面向方面编程。AOP带来了新的编程革新。 使得软件设计更加细化,代码的编写顺序不再决定其运行顺序,诞生动态组件概念,结合IOC DI模式,可以实现软件编写和运行的最大灵活性,自诞生以来已经成为Java领域主流模式,典型框架有Spring或AspectJ框架。

   在面向对象系统中,我们经常需要一些任务活动,如记录,交易的安全性,缓存等,这些活动是必要的,但不是业务逻辑的一部分,被称为"横切关注点"。

(横切关注==跨整个系统的常用功能)

   从业务逻辑中分离横切关注点,为写出一个精心设计的解耦系统迈出了一大步。让我们关注思考如何处理横切关注点的分离。

   继承Inheritance

   继承的是那些通用功能,继承需要我们设计一个基类,如果我们要重用到多个地方可能需要修改这个基类。继承Inheritance == 难以在后来修改(无弹性代码)

   委托Delegation

委托是一个处理横切关注的好办法,委托和组合分享一个通用功能,但是我们需要在很多地方调用这个委托对象,显得繁琐。委托 == 繁琐

   AOP允许我们以模块化关注横向点并形成对象,称为Aspect,这样使用Aspect能够创建一个干净解耦的代码。

AOP相关概念

  1. Concerns关注 – 这是基于功能的模块部分,有两种类型关注:. 1. 核心关注 2. 跨切面关注(Aspect). 核心关注是有关业务逻辑,比如生成工资单,让员工记录,做银行转帐。跨切面关注是配合业务的一些活动任务,如日志 缓存等。
  2. Joinpoint连接点 – Joinpoint是在执行时的切入点,Aspect也就是跨切面关注的一些功能要加入主要业务功能的地方,一个连接点可以是一个被调用的方法。
  3. Advice建议 – 每个Aspect都有一个目标,它的任务是什么,这个任务会被切入到哪个连接点,这些都被称为Advice. Advice能够定义Aspect什么时候执行任务,是在核心关注也就是主要业务活动的之前 之后或者前后执行?
  4. Pointcut 切入点– 一个系统有很多连接点,但是并不是所有连接点都需要被选择切入Aspect的,Aspect从切入点能够获得帮助,选择哪个连接点介入。
  5. Aspect方面 – Advice 和 Pointcut定义了一个方面Aspect.Advice定义了Aspect的任务和什么时候执行它,而切入点Pointcut定义在哪里具体地方切入,也就是说,Aspect定义了它是什么东西 什么时候切入和在哪里切入。
  6. Target目标 – 目标是一个被切入的地方,它一般是核心关注,业务功能。
  7. Proxy代理 – 当一个advice应用到目标对象时,这时一个代理对象将被创建. AOP容器创建和管理代理对象的生命周期。
  8. Weaving织入 – Weaving是一个混合横向方面到目标业务对象的过程,织入可以是在编译时间,也可以在运行时间使用classload,Spring AOP缺省是在运行时间。

 

动态代理与AOP

Spring的AOP实现

AOP是什么?

AOP详解和AspectJ

AOP与权限控制实现

探讨Spring框架使用真相?

Spring专题

JdonFramework的AOP

Akka的产品化应用经验分享

AOP专题讨论