(spring-第17回【AOP基础篇】) 创建增强类
一、 增强类包含的信息:
a) 横切逻辑(插入的具体代码)
b) 部分连接点信息(在方法的哪个位置插入代码,比如方法前、方法后等)。
二、 增强的类型
每一种增强有一个需要实现的增强类。
a) 前置增强
顾名思义,在目标方法前实施增强。
增强类:org.springframework.aop.MethodBeforeAdvice.
举例,三步走:
1) 第一步,创建目标类接口和目标类:
2) 第二步,实现MethodBeforeAdvice,创建增强类:
3) 第三步,通过ProxyFactory把增强织入目标类,并生成代理。
4) 第三步改为在XML中配置:
- 配置中当然还有一些其他属性。比如singleton,决定返回是否为单实例等。
- 三个P分别为:指定代理的接口、指定目标类、指定增强
5) 注意事项:
- ProxyFactory 内部使用JDK代理或CGLib代理。
- 通过ProxyFactory的setInterfaces可以指定针对接口进行代理(这时ProxyFactory就使用JDK动态代理。)
- 如果是针对类的代理,则使用CGLib。
- 通过ProxyFactory 的setOptimize(true)可启动自动优化代理。
b) 后置增强
c) 环绕增强(综合实现了前置、后置增强)
d) 异常抛出增强
常用于事务管理,当参与事务的某个Dao发生异常时,事务管理器就必须回滚事务。这时可以在增强逻辑中写回滚代码。
e) 引介增强
引介增强是一种比较特殊的增强类型,它不是在目标方法周围织入增强,而是为目标类创建新的方法和属性
所以,引介增强的连接点是类级别的,而非方法级别。
所以,我们可以给目标类添加一个接口的实现,即原来目标类未实现某个接口,通过引介增强可以为目标类创建某接口的代理。
举例:三步走:
1) 第一步,定义接口
第四行是我们企图加在目标类上的增强方法。
2) 第二步,通过XML配置把增强织入目标类
3) 第三步,强制实现
(spring-第17回【AOP基础篇】) 创建增强类的更多相关文章
- Spring AOP切面变成——创建增强类
说明 Spring使用增强类定义横向逻辑,同时Spring只支持方法连接点,增量类还包含在方法的哪一点添加横切代码的方位信息.所以增强既包含横向逻辑,又包含部分连接点的信息. 类型 按着增强在目标类方 ...
- Spring+SpringMVC+MyBatis+easyUI整合基础篇(六)maven整合SSM
写在前面的话 承接前文<Spring+SpringMVC+MyBatis+easyUI整合基础篇(五)讲一下maven>,本篇所讲述的是如何使用maven与原ssm项目整合,使得一个普 ...
- Spring+SpringMVC+MyBatis+easyUI整合基础篇(十一)SVN服务器进阶
日常啰嗦 上一篇文章<Spring+SpringMVC+MyBatis+easyUI整合基础篇(十)SVN搭建>简单的讲了一下SVN服务器的搭建,并没有详细的介绍配置文件及一些复杂的功能, ...
- Spring+SpringMVC+MyBatis+easyUI整合基础篇(八)mysql中文查询bug修复
写在前面的话 在测试搜索时出现的问题,mysql通过中文查询条件搜索不出数据,但是英文和数字可以搜索到记录,中文无返回记录.本文就是写一下发现问题的过程及解决方法.此bug在第一个项目中点这里还存在, ...
- Spring+SpringMVC+MyBatis+easyUI整合基础篇(十二)阶段总结
不知不觉,已经到了基础篇的收尾阶段了,看着前面的十几篇文章,真的有点不敢相信,自己竟然真的坚持了下来,虽然过程中也有过懒散和焦虑,不过结果还是自己所希望的,克服了很多的问题,将自己的作品展现出来,也发 ...
- Spring+SpringMVC+MyBatis+easyUI整合基础篇
基础篇 Spring+SpringMVC+MyBatis+easyUI整合基础篇(一)项目简介 Spring+SpringMVC+MyBatis+easyUI整合基础篇(二)牛刀小试 Spring+S ...
- Spring AOP获取不了增强类(额外方法)或无法通过getBean()获取对象
Spring AOP获取不了增强类(额外方法)和无法通过getBean()获取对象 今天在学习AOP发现一个小问题 Spring AOP获取不了额外方法,左思右想发现是接口上出了问题 先上代码 获取不 ...
- (spring-第20回【AOP基础篇】)Spring与事务
要想了解Spring的事务,首先要了解数据库事务的基本知识,数据库并发会产生很多问题,Spring使用ThreadLocal技术来处理这些问题,那么我们必须了解Java的ThreadLocal技术.下 ...
- (spring-第18回【AOP基础篇】) 创建切面
一. 在创建增强一节中,增强被织入到目标类的所有方法中,假设我们希望有选择地织入到目标类某些特定的方法中,就需要使用切点进行目标连接点的定位. 二. spring通过org.springfra ...
随机推荐
- sql server2008 R2 生成带数据的脚本
目前 sql server2008 R2 版本有这个功能 http://www.cnblogs.com/weisenz/archive/2013/03/20/2971334.html
- 添加一个DataSet
/// <summary> /// 返回状态数据 /// </summary> /// <param name="values"></pa ...
- Cheatsheet: 2015 05.01 ~ 05.31
.NET .NET on Mac for the OS X n00b without Mono via Visual Studio Code Microsoft frameworks deprecat ...
- python __file__ 与argv[0]
在python下,获取当前执行主脚本的方法有两个:sys.argv[0]和__file__. sys.argv[0] 获取主执行文件路径的最佳方法是用sys.argv[0],它可能是一个相对路径,所以 ...
- awk命令简单介绍
简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...
- ruby 资源收集
http://huacnlee.com/blog/archives/ 一个牛人李华顺的个人网站 http://api.rubyonrails.org/ 不错的ruby on rails学习网站 htt ...
- JDBC连接sql server数据库及其它
JDBC连接sql server数据库的步骤如下: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.lang.Class类的 ...
- mysql 命令(一)
1. 函数向日期添加指定的时间间隔 DATE_ADD(date,INTERVAL expr type)eg:DATE_ADD(CURDATE(),INTERVAL 1 MONTH) //在当前时间加一 ...
- myeclipse/eclipse没有Project Facets的解决方法
http://www.cnblogs.com/jerome-rong/archive/2012/12/18/2822783.html 经常在eclipse中导入web项目时,出现转不了项目类型的问题, ...
- HBase之show table
import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.TableName; import or ...