AOP面向方面编程
AOP是OOP的延续,是Aspect Oriented Programming的缩写,意思是面向方面编程。AOP带来了新的编程革新。 使得软件设计更加细化,代码的编写顺序不再决定其运行顺序,诞生动态组件概念,结合IOC DI模式,可以实现软件编写和运行的最大灵活性,自诞生以来已经成为Java领域主流模式,典型框架有Spring或AspectJ框架。
在面向对象系统中,我们经常需要一些任务活动,如记录,交易的安全性,缓存等,这些活动是必要的,但不是业务逻辑的一部分,被称为"横切关注点"。
(横切关注==跨整个系统的常用功能)
从业务逻辑中分离横切关注点,为写出一个精心设计的解耦系统迈出了一大步。让我们关注思考如何处理横切关注点的分离。
继承Inheritance
继承的是那些通用功能,继承需要我们设计一个基类,如果我们要重用到多个地方可能需要修改这个基类。继承Inheritance == 难以在后来修改(无弹性代码)
委托Delegation
委托是一个处理横切关注的好办法,委托和组合分享一个通用功能,但是我们需要在很多地方调用这个委托对象,显得繁琐。委托 == 繁琐
AOP允许我们以模块化关注横向点并形成对象,称为Aspect,这样使用Aspect能够创建一个干净解耦的代码。
AOP相关概念
- Concerns关注 – 这是基于功能的模块部分,有两种类型关注:. 1. 核心关注 2. 跨切面关注(Aspect). 核心关注是有关业务逻辑,比如生成工资单,让员工记录,做银行转帐。跨切面关注是配合业务的一些活动任务,如日志 缓存等。
- Joinpoint连接点 – Joinpoint是在执行时的切入点,Aspect也就是跨切面关注的一些功能要加入主要业务功能的地方,一个连接点可以是一个被调用的方法。
- Advice建议 – 每个Aspect都有一个目标,它的任务是什么,这个任务会被切入到哪个连接点,这些都被称为Advice. Advice能够定义Aspect什么时候执行任务,是在核心关注也就是主要业务活动的之前 之后或者前后执行?
- Pointcut 切入点– 一个系统有很多连接点,但是并不是所有连接点都需要被选择切入Aspect的,Aspect从切入点能够获得帮助,选择哪个连接点介入。
- Aspect方面 – Advice 和 Pointcut定义了一个方面Aspect.Advice定义了Aspect的任务和什么时候执行它,而切入点Pointcut定义在哪里具体地方切入,也就是说,Aspect定义了它是什么东西 什么时候切入和在哪里切入。
- Target目标 – 目标是一个被切入的地方,它一般是核心关注,业务功能。
- Proxy代理 – 当一个advice应用到目标对象时,这时一个代理对象将被创建. AOP容器创建和管理代理对象的生命周期。
- Weaving织入 – Weaving是一个混合横向方面到目标业务对象的过程,织入可以是在编译时间,也可以在运行时间使用classload,Spring AOP缺省是在运行时间。
动态代理与AOP
Spring的AOP实现
AOP是什么?
AOP详解和AspectJ
AOP与权限控制实现
探讨Spring框架使用真相?
Spring专题
JdonFramework的AOP
Akka的产品化应用经验分享
AOP专题讨论