spring aop编程
1、AOP,面向切面编程(aspect Oriental programing),使用aop,可以将处理切面aspect的代码注入到主程序,通常主程序的主要目的不是处理这些切面aspect,可以防止代码混乱。拦截机 interceptor是AOP的另一中叫法。(其中使用的模式为代理模式,动态代理模式)。
2、通知advise:在aspect的某个连接点(在Spring的aop中,一个连接点就是一个方法的执行)上执行的动作。
切入点pointcut:匹配连接点的断言。通知和一个切入点表达式关联,并在满足这个切入点的连接点上运行。
目标对象:target object,被一个活多个切面所通知的对象。也称被通知对象。
3、spring中的aop
加入支持aop的jar包:
aopalliance.jar
aspectjrt.jar
aspectjweaver.jar
spring-aop.jar
spring-aspect.jar
(1)在xml中加入aop的命名空间:
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> </beans>
(2)写aspect类和切面的通知
<bean id="myAspect" class="com.spring1.util.Aspect"/>
<aop:config>
<!--切面 -->
<aop:aspect ref="myAspect">
<!-- 切入点 执行(方法访问修饰符? 方法返回类型 声明类? 方法名(方法参数类型) 抛出异常?) -->
<aop:pointcut expression="execution(* com.spring1.dao..*.*(..))" id="point1"/>
<aop:before method="beforeAdvise" pointcut-ref="point1"/>
<aop:after method="afterAdvise" pointcut-ref="point1"/>
<!-- 返回通知,最后的参数是通知参数的名 -->
<aop:after-returning method="afterReturning" pointcut-ref="point1" returning="ret"/>
<!-- 异常通知,最后参数是异常的参数的名 -->
<aop:after-throwing method="afterThrowing" pointcut-ref="point1" throwing="e"/>
</aop:aspect>
</aop:config>
(3)将aspect类交给Spring管理,配置aspect类的bean
上边已配置过
(4)根据aop中的通知写通知函数:
//切面类
public class Aspect {
//通知...
void beforeAdvise(){
System.out.println("before");
} void afterAdvise(){
System.out.println("after");
} void afterReturning(Object ret){
System.out.println("afterReturning " +ret.toString());
} void afterThrowing(Exception e){
System.out.println("afterThrowing " + e.getMessage());
}
}
(5)当上边的都需要些的时候可以直接用 环绕通知代替:
<bean id="myAspect" class="com.spring1.util.Aspect"/>
<aop:config>
<!--切面 -->
<aop:aspect ref="myAspect">
<!-- 切入点 执行(方法访问修饰符? 方法返回类型 声明类? 方法名(方法参数类型) 抛出异常?) -->
<aop:pointcut expression="execution(* com.spring1.dao..*.*(..))" id="point1"/>
<aop:around pointcut-ref="point1" method="aroundAdvise"/>
</aop:aspect>
</aop:config>
void aroundAdvise(ProceedingJoinPoint pjp){
try {
System.out.println("前置");
Object object = pjp.proceed();
System.out.println(object.toString());
} catch (Throwable e) {
e.printStackTrace();
System.out.println("异常");
}finally{
System.out.println("最终");
}
}
后置通知就是返回后的通知
最终通知又叫finally通知。
spring aop编程的更多相关文章
- Spring AOP编程(二)-AOP实现的三种方式
AOP的实现有三种方式: l aop底层将采用代理机制进行实现. l 接口 + 实现类 :spring采用 jdk 的动态代理Proxy. l 实现类: ...
- Spring学习笔记之四----基于Annotation的Spring AOP编程
你能使用@Aspect annotation将某个Java类标注为Aspect,这个Aspect类里的所有公有方法都可以成为一个Advice,Spring提供了5个Annotation去将某个方法标注 ...
- 二)Spring AOP编程思想与动态代理
一.aop编程思想 1.面向切面,就是能够不动源码的情况下,从横切面切入新的代码功能. 2.实现原理是动态代理 动态代理的步骤 a.写生产厂家,实现接口,代理只能代理接口 b.动态代理类实现Invoc ...
- Spring AOP编程经验总结
编程范式概览:面向过程,面向对象,函数式编程,事件驱动编程,面向切面等, AOP是什么? Spring AOP是采用面向切面编程的编程范式,而非编程语言,它只能解决特定问题,而非所有问题,它与OOP不 ...
- Spring AOP编程(一)-AOP介绍
1. AOP介绍 l 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术 ...
- spring AOP编程--AspectJ注解方式
1. AOP 简介 AOP(Aspect-Oriented Programming, 面向切面编程): 是一种新的方法论, 是对传统 OOP(Object-Oriented Programming, ...
- (转)Spring AOP编程原理、Demo
转自: http://pandonix.iteye.com/blog/336873/ AOP原理: http://blog.csdn.net/moreevan/article/details/1197 ...
- spring AOP 编程--AspectJ注解方式 (4)
1. AOP 简介 AOP(Aspect-Oriented Programming, 面向切面编程): 是一种新的方法论, 是对传统 OOP(Object-Oriented Programming, ...
- spring切面编程AOP 范例一
参照网上的spring AOP编程实例进行配置,但是碰到了几个坑.这篇文章重点讲解一下我踩过的两个坑: 1.使用@Service自动装配的时候,基础扫描包配置要正确: 2.xml中切面配置中的exec ...
随机推荐
- Hibernate级联删除时:Cannot delete or update a parent row: a foreign key constraint fails异常
在删除主表数据时,报了一个异常 Cannot delete or update a parent row: a foreign key constraint fails 原因是主表中还包含字表的数据, ...
- c 函数调用产生的汇编指令和数据在内存情况(2)
c 函数调用产生的汇编指令和数据在内存情况(1) 一直对函数调用的具体汇编指令和各种变量在内存的具体分配,一知半解.各种资料都很详细,但是不实践,不亲自查看下内存总不能笃定.那就自己做下. 两个目的: ...
- chrome离线安装包_下载
ZC: 如何下载的文章 参考:“https://www.tekrevue.com/tip/download-chrome-offline-installer/” 1. f/q 2.下载网址: 2.1. ...
- Tomcat的使用
Tomcat的安装较为简单,尤其是Tomcat的安装文件apache-tomcat-7.0.19-windows-x86.zip,直接解压至目标目录下即可. Tomcat的安装目录下包括bin.con ...
- Python学习(4)运算符
目录 Python 算术运算符 Python 比较运算符 Python 赋值运算符 Python 位运算符 Python 逻辑运算符 Python 成员运算符 Python 身份运算符 Python ...
- mvn编写主代码与测试代码
maven编写主代码与测试代码 3.2 编写主代码 项目主代码和测试代码不同,项目的主代码会被打包到最终的构件中(比如jar),而测试代码只在运行测试时用到,不会被打包.默认情况下,Maven假设项目 ...
- 基本分类方法——KNN(K近邻)算法
在这篇文章 http://www.cnblogs.com/charlesblc/p/6193867.html 讲SVM的过程中,提到了KNN算法.有点熟悉,上网一查,居然就是K近邻算法,机器学习的入门 ...
- Android ViewFlipper的使用分析
[ViewFlipper]——基础 1.ViewPager 和ViewFliping的区别: 最显著的区别就是ViewPager在滑动的时候内部的View默认就能够跟随手指滑动,而 ViewFlipi ...
- centos用户权限设置
了解常见的账号配置文件 学会管理用户账号.组账号 学会设置目录或文件的权限 学会设置目录或文件的归属 用户账号文件/etc/passwd :保存用户名称.宿主目录.登录shall等基本信息 每一行 ...
- [css] vertical-align和line-height
原文链接:http://www.zhangxinxu.com/wordpress/2015/08/css-deep-understand-vertical-align-and-line-height/ ...