面向方面的目的是分离出横向关联的共通侧面。什么是横向关联?什么是共通侧面?什么是方面?
面向对象是以对象为单位,横向关联指涉及到多个对象,如果对象中都有共通的逻辑,这就是共通侧面。横跨多个类的共同关注的事就是方面(Aspect)。
面向方面的编程(AOP)就是针对共同关注的事进行开发。比较典型的场景如日志记录、调试信息、安全认证等。
为何不用继承实现共通的逻辑?一种情况是不同类型的对象期望有共通的逻辑,但它们不能继承同样的基类,但又不想复制代码破坏DRY(don't repeat yourself)规则。另一种情况是不希望更改(或不能更改)原有类的定义,同时又不能更改接口定义,比如调用第三方web service,这就需要一种动态的方法注入自己的逻辑。
有四个关键的 AOP 术语: