码迷,mamicode.com
首页 > 其他好文 > 详细

Aop笔记。

时间:2018-04-12 23:27:09      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:bean   单例   动作   对象   模块   模式   service   过程   简单的   

Spring程序中实现AOP

 

  1. Spring程序实现aop的方式

1) 使用Spring的API实现AOP,将方面切入Spring管理的bean

2) 使用AspectJ的API实现AOP,将方面切入到任何对象

  1. 使用@AspectJ的各种注解
  2. 使用aop:config元素配置AOP,基于xml进行配置aop, 基于Schema的AOP支持

 

Spring 框架实现aop使用动态代理的方式实现AOP

设计模式:

单例模型, 工厂模式, 代理(Proxy)模式(Pattern)

代理模式

  1. 静态代理 static proxying
  2. 动态代理 dynamic proxying

 

 

  1. AOP的一些概念/术语

 

1) 切面/方面(Aspect)一个关注点的模块化,这个关注点可能会横切多个对象。可创建方面类,用于包含次要业务逻辑。

2) 通知(Advice)在切面的某个特定的连接点上执行的动作,也就是方面包含/要执行的操作。通知有5中类型:

  1. 前置通知(Before advice): 在某连接点之前执行的通知
  2. 返回后通知(After returning advice): 在某连接点正常完成后执行的通知:例如,一个方法没有抛出任何异常,正常返回。
  3. 异常后通知(After throwing advice): 在方法抛出异常退出时执行的通知。
  4. 最终通知(After (finally) advice):当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)。
  5. 环绕通知(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笔记。

标签:bean   单例   动作   对象   模块   模式   service   过程   简单的   

原文地址:https://www.cnblogs.com/Kai-Jordan/p/8810898.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!