spring的AOP基础、前置通知与后置通知
来源:互联网 发布:过期未注册域名查询 编辑:程序博客网 时间:2024/04/30 21:03
AOP的主要编程对象是切面(aspect),而切面模块化横切关注点
在应用AOP编程时,仍然需要定义公众功能,并且不必修改受影响的类,这样一来横切关注点就被模块化到特殊的对象(切面)里
AOP的好处
每个事物逻辑位于一个位置,代码不分散,便于维护和升级
业务模块更简洁,值包含核心业务代码
AOP的相关术语
切面(Aspect):横切关注点(跨越应用程序多个模块的功能)被模块化的特殊对象
通知(Advice):切面必须要完成的工作
目标(Target):被通知的对象
代理(Proxy):想目标对象应用通知之后创建的对象
连接点(Joinpoint):程序执行的某个特定位置:如类某个方法调用前、调用后、方法抛出异常后等。连接点由两个信息确定:方法表示的程序执行点;相对点表示的方位。例如ArithmethicCalculator#add()方法执行前的连接点,执行点为ArithmethicCalculator#add();方位为该方法执行前的位置
切点(point):每个类都拥有多个连接点:例如ArithmethicCalculator的所有方法实际上都是连接点,即连接点时程序类中客观存在的事物。AOP通过切点定位到特定
的连接点。类比:连接点相当于数据库中的记录,切点相当于查询条件。切点和连接点不是一对一的关系,一个切点匹配多个连接点,切点通过org.springframework.aop.Pointcut接口进行描述,它使用类和方法作为连接点的查询条件
AspectJ:java社区里最完整最流行的AOP框架,在Spring2.0以上版本中,可以使用基于AspectJ注解或基于XML配置的AOP。
在Spring中启用AspectJ注解支持
1 要在Spring应用中使用AspectJ注解,必须在classpath下包含AspectJ类库:aopalliance.jar、aspectj.weaver.jar和spring-aspects.jar
2 将aop Schema添加到<beans>根元素中
3 要在SpringIOC容器中启用AspectJ注解支持,只要在bean配置文件中定义一个空的xml元素:<aop:aspectj-autoproxy>
4 当SpringIOC容器侦测到bean配置文件中的<aop:aspectj-autoproxy>元素时,会自动为与AspectJ切面匹配的bean创建代理
用AspectJ注解声明切面
要在Spring中声明AspectJ切面,只需要在IOC容器中将切面声明为bean实例,当在
SpringIOC容器中初始化AspectJ切面之后,SpringIOC容器就会为那些与AspectJ切
面相匹配的bean创建代理在AspectJ注解中,切面只是一个带有@Aspect注解的Java类
通知是标注有某种注解的简单的java方法
AspectJ支持5中类型的通知注解
@Before:前置通知,在方法执行之前执行
@After:后置通知,在方法执行之后执行
@AfterRunning:返回通知,在方法返回结果之后执行
@AfterThrowing:异常通知,在方法抛出异常之后执行
@Around:环绕通知,围绕着方法执行
利用方法签名编写AspectJ切入点表达式
最典型的切入点表达式是根据方法的签名来匹配各种方法:
1,execution * com.test.ceshi.beans.ArithmeticCalculator.*(..):匹配ArithmeticCalculator中声明的所有方法,第一个*代表任意修饰符及任意返回值,第二个*代表任意方法。..匹配任意数量的参数.若目标类与接口与该切面在同一个包中,可以省略包名
2,execution public * ArithmeticCalculator.*(..):匹配ArithmeticCalculator接口的所有公有方法.
3,execution public double ArithmeticCalculator.*(..):匹配ArithmeticCalculator中返回double类型数值的方法
4,execution public double ArithmeticCalculator.*(double,..):匹配第一个参数为double类型的方法,..匹配任意数量任意类型的参数
5,execution public double ArithmeticCalculator.*(double,double):匹配参数类型为double,double类型的方法。
步骤
1 加入jar包
2 在配置文件中加入aop的命名空间
3 基于注解的方式
1 在配置文件中加入如下配置
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
2 把横切关注点的代码抽象到切面的类中.
切面首先是一个IOC钟的bean,即加入@Component
切面还需要加入 @Aspect注解
在类中声明具体通知
声明一个方法
在方法前加入@Before注解
可以在通知方法中声明一个类型为JoinPoint的参数,然后就能访问链接细节,如方法名称和参数值
前置通知
后置通知
后置通知实在连接点完成之后执行的,即连接点返回结果或者抛出异常的时候,下面的后置通知记录了方法的终止
一个切面可以包括一个或者多个通知。
知识点讲完了,下面看示例,我一般喜欢贴示例,运行下就明白了。
相关类:
- spring的AOP基础、前置通知与后置通知
- Spring AOP前置通知和后置通知
- spring中前置通知与后置通知
- Spring前置通知与后置通知
- Spring aop 前置通知、后置通知、返回通知、 异常通知 、后置通知
- Spring AOP中的前置通知和后置通知详解
- spring的前置通知,后置通知,环绕通知
- String4笔记----AOP的前置通知和后置通知
- Spring笔记4-AOP,前置通知,后置通知,返回通知,异常通知
- Spring AOP-通知-后置通知
- Spring AOP-后置通知
- Spring--AOP-后置通知
- Spring框架——AOP前置、后置、环绕、异常通知
- Spring AOP-通知-前置通知
- Spring AOP-前置通知
- Spring--AOP-前置通知
- Spring AOP学习笔记(2):AOP前置通知&后置通知
- Spring -- aop(面向切面编程),前置&后置&环绕&抛异常通知,引入通知,自动代理
- 如何给RadioButton设置图片大小
- 在使用模板类的时候注意事项
- Kendo UI grid API 获取 filter 后的所有数据
- PHP空间出现session无法保存问题解决办法
- Python多进程通信Queue、Pipe、Value、Array实例
- spring的AOP基础、前置通知与后置通知
- C语言简单递归实现字符串逆序输出
- 全国雾霾大数据,哪里才是桃花源?
- ios中如何自定义数字键盘
- 编写宏时需要注意的几点
- 2015年, 常见页面问题及其解决方法--css篇
- 居中相对定位和绝对定位的元素
- iso小练习,获取界面的空间,变量字符串int循环判断,get请求数据
- leetcode刷题之旅——215. Kth Largest Element in an Array