code From Spring In Action

软件开发中分布在应用中多处的功能被称为横切关注点

将这些横切关注点与业务逻辑相分离正是面向切面编程所解决的。

依赖注入有助于应用对象之间的解耦,而AOP可以实现横切关注点与它们所影响的对象之间的解耦

横切关注点可以被模块化为特殊的类,这些类被称为切面

 

描述AOP的术语:通知(Advice) 切点(pointcut) 连接(joint)

切面的工作被称为通知,通知除了描述切面要完成的工作,还描述了切面何时执行的问题。

连接点是应用执行过程中能够插入切面的一个点,这个点可以是调用方法时 抛出异常时 甚至修改一个字段时。

切点(pointcut)定义了切面会在何处接入。切点的定义会匹配一个或多个连接点,通常我们会使用明确的类和方法名称来指定这些切点,或者利用正则表达式定义匹配的类和方法名称模式来指定这些切点。有些AOP框架允许我们创建动态的切点,根据运行时方法的参数来决定是否应用通知。

切面是通知和切点的结合。他们共同定义了切面的全部内容——切面是什么,何时,何处完成其功能。

引入允许我们向现有的类中添加新方法或属性。

织入是将切面应用到目标对象来创建新的代理对象的过程。

 

Spring提供了4中AOP支持

1、基于代理的经典AOP 2、@AspectJ注解驱动的切面 3、纯POJO切面 4、注入式AspectJ切面

前三种都是Spring基于代理的AOP变体,局限于方法拦截;如果需要在构造器或者属性拦截,应利用Spring的DI将Spring Bean注入到AspectJ切面中。

 

posted @ 2015-03-22 23:57  nozbwang  阅读(197)  评论(0编辑  收藏  举报