aop

来源:互联网 发布:数据库工程师考试 编辑:程序博客网 时间:2024/06/14 17:31
AOP


AOP:面向切面编程.是对OOP编程的提升,可改善程序结构. 
主要思想是将共通处理封装成切面对象,利用Spring容器将切面对象 
作用到某一批目标对象之上。当执行目标对象方法时,会执行切面对象的功能. 
(1)相关概念 
a. 切面:用于封装共通处理(即关注点),将来用于横切多个目标对象 
b. 连接点:程序在调用时的某个特定点,比如方法调用或者异常处理. 
c. 切入点: 连接点的集合,一个连接点集合的表达式(与正则表达式相似) 
d. 通知:在连接点上执行的动作,比如前置通知,后置通知,异常通知,环绕通知,最终通知. 
e. 织入:把切面连接到其他应用程序类型或对象上.该过程在运行时完成. 
f.目标对象:目标对象 
g. AOP代理:Spring容器会为每一个目标对象动态创建一个AOP代理对象. 
由该对象执行切面处理方法和目标对象的方法


try{ 
执行前置通知方法 
//执行环绕通知前半部分处理 
执行目标对象方法 
//执行环绕通知后半部分处理 
执行后置通知方法 
}catch(){ 
执行异常通知方法 
}finally{ 
执行最终通知方法 
}


(2)AOP示例(注意:引入aspectjrt.jar,aspectjweaver.jar,cglib-nodep-2.1_3.jar) 
execution - 匹配方法执行的连接点, 
这是你将会用到的Spring的最主要的切入点指示符。 
execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) 
throws-pattern?) 
任意公共方法的执行: 
execution(public * *(..)) 
任何一个名字以“set”开始的方法的执行: 
execution(* set*(..)) 
AccountService接口定义的任意方法的执行: 
execution(* com.xyz.service.AccountService.*(..)) 
在service包中定义的任意方法的执行: 
execution(* com.xyz.service..(..)) 
在service包或其子包中定义的任意方法的执行: 
execution(* com.xyz.service...(..))
0 0