纲要
1.概述
1.1 谈谈AOP,谈谈代理
在编写正文前,我想聊聊什么是AOP?如果在分析一件事物前,没有明确这件事物的概念,那么讨论无法继续。
对于一件事物,我觉得我应该至少从几个维度去了解它,以AOP为例:
- AOP是什么?
- 什么时候或者是什么场景该使用AOP?
- 为什么要使用AOP?
- AOP是怎么运作的?
以上的问题应该是递进式的,了解AOP的实现原理应该是比较充分地理解前几个问题,否则所谓的分析实现原理,只不过是纸上谈兵,不值一提。
什么是AOP?
AOP(Aspect Orient Programing),翻译过来,即是面向切面编程,个人的理解,它是一种编码理念,是面向对象编程的另一种补充。
为什么使用AOP?
在整个业务流程线中,大多数编码逻辑都是一种纵向流程,以对象的行为进行交互,推动系统的开展,这种纵向的设计思维,在单一类中进行对象的设计,并不存在共性问题,但是一旦系统复杂程度加大,这时候存在大量的共性,如果依然以纵向的设计思维,那么这时候要去管理这些类的公共行为,则会十分复杂。
另一方面,对于业务开发人员而言,对于部分不属于业务流程的过程逻辑,实际他本身是不关注的,他更希望的是能集中精力到业务逻辑里面去。
上面的描述有些抽象,以下举个例子:
比如我们希望设计一个日志打印模块,以纵向流程的思维,我们将会在下面每个类都加入日志打印的方法。这种实现会有两个不好的地方。第一,业务开发者无法专注于业务,要分心到日志的输出;第二、在系统设计上,这种日志输出的代码将会分散到各处,充满不好的味道。
public class ClassA {
Logger logger = LogFactory.getLogger(this.getClass());