Aop笔记。
Posted kai-jordan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Aop笔记。相关的知识,希望对你有一定的参考价值。
Spring程序中实现AOP
- Spring程序实现aop的方式
1) 使用Spring的API实现AOP,将方面切入Spring管理的bean
2) 使用AspectJ的API实现AOP,将方面切入到任何对象
- 使用@AspectJ的各种注解
- 使用aop:config元素配置AOP,基于xml进行配置aop, 基于Schema的AOP支持
Spring 框架实现aop使用动态代理的方式实现AOP
设计模式:
单例模型, 工厂模式, 代理(Proxy)模式(Pattern)
代理模式:
- 静态代理 static proxying
- 动态代理 dynamic proxying
- AOP的一些概念/术语
1) 切面/方面(Aspect):一个关注点的模块化,这个关注点可能会横切多个对象。可创建方面类,用于包含次要业务逻辑。
2) 通知(Advice):在切面的某个特定的连接点上执行的动作,也就是方面包含/要执行的操作。通知有5中类型:
- 前置通知(Before advice): 在某连接点之前执行的通知
- 返回后通知(After returning advice): 在某连接点正常完成后执行的通知:例如,一个方法没有抛出任何异常,正常返回。
- 异常后通知(After throwing advice): 在方法抛出异常退出时执行的通知。
- 最终通知(After (finally) advice):当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)。
- 环绕通知(Around Advice): 最强大的通知,可替换上面任何一个通知, 环绕通知在一个方法执行之前和之后执行。它使得通知有机会 在一个方法执行之前和执行之后运行。而且它可以决定这个方法在什么时候执行,如何执行,甚至是否执行. 尽量使用最简单的通知,比如如果你需要一个前置通知,则使用前置通知即可.在环绕通知中,你可以决定是否执行目标方法. 类似一个拦截器.
通知执行顺序: 前置通知
3) 连接点(Joinpoint): 在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候。在Spring AOP中,一个连接点总是表示一个方法的执行,一个连接点其实就是一个方法。
4) 切入点(Pointcut): 选定要切入方面或通知的连接点叫做切入点,也就是指定要切入通知或方法的方法。
切入点书写模式
execution(modifiers-pattern? return-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)
访问定界符: public, private, protected, default(不写就是default)
execution(访问定界符 方法返回类型 包.类.方法 (参数) 可抛出异常类型)
例如: execution(* com.qdu.dao.*. *(..) )
上例表示com.qdu.dao包下所有类中的所有方法,不管有多个参数,第一个*表示方法返回类型为任何类型
execution关键字 - 匹配方法执行的连接点,这是你会用到的Spring的最主要的切入点指示符。
切入点示例:
? 任意公共方法的执行:
execution(public * *(..))
? 任何一个名字以“set”开始的方法的执行:
execution(* set*(..))
? AccountService接口定义的任意方法的执行:
execution(* com.xyz.service.AccountService.*(..))
? 在service包中定义的任意方法的执行:
execution(* com.xyz.service.*.*(..))
? 在service包或其子包中定义的任意方法的执行:
execution(* com.xyz.service..*.*(..))
5) 目标(Target): 是方面应用到的对象,如 UserDaoImpl的对象
6) 织入(Weaving): 将方面应用到目标对象的过程叫做织入 weave
以上是关于Aop笔记。的主要内容,如果未能解决你的问题,请参考以下文章