一、AOP背景 aop(aspect oriented progrmming), 面向切面编程. 在oop的概念中, 开发者可以自由的定义纵向关系, 但对横向的关系却有点束手无策. Aop技术的出现可以解决这一问题. 进一步描述问题: 代码混乱: 越来越多的非业务需求(日志和验证等)加入后, 原有的业务方法急剧膨胀, 每个方法在处理核心逻辑的同时还必须兼顾其他多个关注点. 代码分散: 以日志需求为例, 只是为了满足这个单一的需求, 就不得不在多个模块(方法)里多次重复相同的日志代码.如果日志需求发生变化,必须更改所有的模块. aop的主要编程对象是切面,而切面模块化横切关注点. 在应用aop编程时, 仍然需要定义公共功能, 但可以明确的定义这个功能在哪里,以什么方式应用, 并且不必修改受影响的类 aop的好处: 每个事物逻辑位于一个位置, 代码不分散, 便于维护和升级 业务模块更简洁, 只包含核心业务代码 二、AOP基本概念 切面(Aspect): 横切关注点, 跨越应用程序多个模块的功能, 被模块化的特殊对象 通知(Advice): 切面必须要完成的工作 目标(Target): 被通知的对象 代理: 向目标对象应用通知之后创建的对象 连接点(JoinPoint): 程序执行的某个特定位置. 连接点由两个信息确定: 方法表示的程序执行点; 相对点表示的方位. 切点