10.Spring---面向切面

http://www.cnblogs.com/caoyc/p/5629507.html

一、名词解释

1.通知:要执行的方法
2.连接点:什么时候调用
3.切点:方法执行的位置
4.切面:在什么地方执行什么方法
5.引入:允许我们向现有的方法添加新的属性
6.织入:什么时候加入切面

二、Spring只支持Java级别的连接点

三、借助AspectJ切点表达式定义切面

1.在非Maven项目中首先要去官网下载jar包,并且将Jar包解压拿到其中的两个包导入到项目

10.Spring---面向切面_第1张图片
Paste_Image.png

2.配置命名空间

 xmlns:aop="http://www.springframework.org/schema/aop"  
 xsi: http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd

3.使用@Aspect表示切面

*号表示返回任意类型  
..表示方法的参数可以是任意类型,代指所有perform重载的方法都可以**
execution(* com.crazyorange.springtest.aop.Perform.perform(..))

3.1 使用@Aspect表示切面
**3.2 使用PointCut定义一个可用重用的切面 **

10.Spring---面向切面_第2张图片
Paste_Image.png

4.启用AspectJ自动代理

10.Spring---面向切面_第3张图片
Paste_Image.png

5.提供切面的bean
当我们配置了自动代理以后,也要给spring提供一个切面的bean,否则spring找不到切面对象就不能够创建切面。

10.Spring---面向切面_第4张图片
Paste_Image.png

三、创建环绕通知

@ARound创建环绕通知
3.1 环绕通知必须要有一个ProceedingJoinPoint参数,该参数的功能是移交控制权,在适当的时候必须调用proceed方法,否则会阻塞被通知的方法

10.Spring---面向切面_第5张图片
Paste_Image.png

四、使用通知中的参数

execution(* com.crazyorange.springtest.aop.Perform.performAround(String))&&args(name)

args:该限定符表示传递给被通知方法的参数也会传递给定义的通知方法
1.String:指定方法的参数类型
2.name:对应方法的参数名称,必须和被通知方法的参数名一样
3.切点方法的参数要与定义的切点的参数名一致,这样才能传递给切点方法。


10.Spring---面向切面_第6张图片
Paste_Image.png

五、通过注解给bean引入新的方法。

使用场景:当我们需要给一个类动态的添加一个新的方法时,可以使用

你可能感兴趣的:(10.Spring---面向切面)