在软件开发中,分布于应用多出的功能被称为和横切关注点. 通常,这些横切关注点从概念上是与应用的业务逻辑相分离的(但是往往直接嵌入到应用的业务逻辑中).将这些横切关注点与业务逻辑相分离正是面向切面编成(AOP)所要解决的
要了解什么是AOP,首先应该了解AOP相关术语,只有完全理解这些,才能更好的掌握AOP
描述切面的常用术语有 通知(advice), 切点(pointcut), 连接点(join point).
通知(advice)
切面有目标-他必须要完成的工作,成为通知.通知定义了切面是什么以及何时使用.
Spring切面可以应用5种类型的通知
连接点是在应用执行过程中能够插入切面的一个点.这个点可以是调用方法时,抛出异常时,甚至修改一个字段时.切面代码可以利用这些点插入到应用的正常流程之中,并添加新的行为
切点(pointcut)
切点的定义会匹配通知所要织入的一个或多个连接点
切面(Aspect)
切面是通知和切点的结合,通知和切点共同定义了关于切面的全部内容-它是什么,在何时和何处完成其功能
Spring提供了4种各具特色的AOP支持
在XML文件中添加如下代码
1
|
< aop:aspectj-autoproxy > |
以下代码创建一个POJO使其成为切面
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
@Aspect public
class
LogAOP { //sevice包及其子包所有类的所有方法 @Pointcut ( "execution(*
com.kenshiro.service..*.*(..))" ) public
void
log(){} @Before ( "log()" ) public
void
beforeLog(){ System.out.println( "方法前执行" ); } @AfterReturning ( "log()" ) public
void
AfterLog(){ System.out.println( "方法成功返回执行" ); } @Around ( "log()" ) public
void
AroundLog(ProceedingJoinPoint joinpoint){ System.out.println( "方法之前执行" ); joinpoint.proceed();
//执行业务代码 System.out.println( "方法之后执行" ); } } |
就是这么简单,一个简单的POJO加上一个@Aspect ,定义一个或者多个切点(pointcut).N个通知方法(advice).
切点配合通知便是切面,切面便是AOP(在什么位置,什么时候,做什么)
更详细的AOP语法以及使用标准:http://blog.csdn.net/nthack5730/article/details/45604031
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/nthack5730/article/details/46738827