(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 ...
随机推荐
- canvas 绘图
<canvas>元素是HTML5中的绘图元素,通过定义一个画布区域,然后使用javascript动态地在这个区域里面绘制图形,对于2D和3D图形都可以绘制,我们将其分成2D上下文和WebG ...
- 升级PHP
wget http://down.wdlinux.cn/in/php_up53.shsh php_up53.sh
- 【Spring】利用Spring最简单地使用异步方法
有时候我们想异步地调用某个方法. 比如这个场景:在业务处理完毕后,需给用户发送通知邮件.由于邮件发送需调用邮箱服务商,有可能发生阻塞,我们就可以异步调用.当然有个前提,即如果邮件发送失败,不需要提示用 ...
- MySQL修改表一次添加多个列(字段)和索引
MySQL修改表一次添加多个列(字段) ALTER TABLE table_name ADD func varchar(50), ADD gene varchar(50), ADD genedetai ...
- Sqrt(x) - LintCode
examination questions Implement int sqrt(int x). Compute and return the square root of x. Example sq ...
- RPM安装rabbitMQ
系统使用的是centos 7 - minimal 建立用户和组: # groupadd rabbitmq # useradd rabbitmq -g rabbitmq 在安装rabbitMQ之前需要先 ...
- 学习mongo系列(七)aggregate() ,$group() 管道
aggregate()聚合,主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果.有点类似sql语句中的 count(*) 接上边的数据库: > db.user.aggregate ...
- 页面加载后resize页面布局
在我们写web的时候,有的时候页面加载完以后,布局位置有一些问题,手动改变窗口大小后则正常显示位置. 其实,我们手动改变窗口大小,是执行了resize方法. share一下兼容方法: coffee c ...
- google protobuf ios开发使用
简介: protobuf 即 google protocol buffer 是一种数据封装格式协议: 比如其他经常用的xml,json等格式:protobuf的优势是效率高,同样的一份数据使用prot ...
- react mixins编写
var LogMixin = { componentWillMount: function () { console.log('Component will mount'); }, component ...