在介绍AOP之前,首先了解一下OOP(面向对象的编程),所谓“对象”就是再面向对象的语言中,一般是指类在内存中装载的实例,具有相关的成员变量和成员函数(方法),OOP的基本特征有四个“抽象”“封装”“继承”“多肽”(想深入了解的可看我之前的这篇介绍:OOP四个基本特征详解);
AOP即为面向切面的编程,可以说是OOP的扩展和延伸,OOP重点在开发者定义纵向的关系,却不适合定义横向的关系(比如日志功能,权限 等等),像这种散布在各处的无关的代码被称为横切,在OOP中,它导致的大量代码的重复,不利用各个模块的重用。但是AOP却很好的处理了这一块的关系。
AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处基本相似,比如权限认证、日志、事务。AOP的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。
例:
public void addMoreDBConfig(){ if(logger.isDebugEnabled()) logger.debug("moreDB:"+moreDB+",set slave ..."); if(moreDB) DataSourceHolder.setDataSource("slave"); } public void clearMoreDBConfig(){ if(logger.isDebugEnabled()) logger.debug("clearDataSource..."); DataSourceHolder.clearDataSource(); }
比如这两个方法有横切关注点logger,他的AOP配置则是: