计算机应用 | 古代文学 | 市场营销 | 生命科学 | 交通物流 | 财务管理 | 历史学 | 毕业 | 哲学 | 政治 | 财税 | 经济 | 金融 | 审计 | 法学 | 护理学 | 国际经济与贸易
计算机软件 | 新闻传播 | 电子商务 | 土木工程 | 临床医学 | 旅游管理 | 建筑学 | 文学 | 化学 | 数学 | 物理 | 地理 | 理工 | 生命 | 文化 | 企业管理 | 电子信息工程
计算机网络 | 语言文学 | 信息安全 | 工程力学 | 工商管理 | 经济管理 | 计算机 | 机电 | 材料 | 医学 | 药学 | 会计 | 硕士 | 法律 | MBA
现当代文学 | 英美文学 | 通讯工程 | 网络工程 | 行政管理 | 公共管理 | 自动化 | 艺术 | 音乐 | 舞蹈 | 美术 | 本科 | 教育 | 英语 |

Spring框架与AOP思想的研究与应用(1)(2)

2014-03-15 01:12
导读:2.2AOP思想在Spring框架中的体现 文章前面已经讲述了AOP的概念以及什么叫做所谓的“横切”关注点,事务管理就是J2EE应用中一个横切多个对象的横切关注点

2.2AOP思想在Spring框架中的体现
文章前面已经讲述了AOP的概念以及什么叫做所谓的“横切”关注点,事务管理就是J2EE应用中一个横切多个对象的横切关注点的例子。
2.2.1事务管理
对于J2EE应用程序而言,事务的处理一般有两种模式:依赖特定事务资源的事务处理与依赖容器的参数化事务管理。在这里我们略去对第一种处理方式的说明,直接对第二种方式,即依赖容器的参数化事务管理来阐述笔者的观点。
Spring事务管理究竟能带给我们什么?
了解Spring的人们都知道,对于传统的基于事务资源的事务处理而言,Spring并不会产生什么影响,我们照样可以成功编写并且运行这样的代码。
对于依赖容器的参数化事务管理而言,Spring则可以用来帮助实现对事务的管理而无须使用EJB。Spring本身也是一个容器,只是相对EJB容器所要付出的代价而言,Spring属于轻量级容器,它能够替代EJB,通过使用AOP来提供声明式事务管理,即可通过Spring实现基于容器的事务管理(从本质上来讲,Spring的事务管理是基于动态AOP)。Spring与EJB最大的区别在于:第一,Spring可以为任意的JavaClass实现事务管理而无须转换成标准的EJB;第二,Spring事务管理并不依赖特定的事务资源从而使得系统的应用与部署更佳灵活。
2.2.2动态代理机制的实现
Spring框架中所提供的AOP支持,是基于动态AOP机制实现的,即通过动态Proxy模式,在目标对象的方法调用前后插入相应的处理代码。AOP代理可以是基于JDK动态代理,也可以是基于CGLIB代理。Spring默认使用的是基于JavaDynamicProxy模式实现,这样任何的接口都能被代理。基于Spirng框架的应用程序开发,程序员会有一种自然的倾向性来实现面向接口编程而不是类,业务对象通常也是实现一个或者多个接口,这也是一种良好的编程习惯。Spring也可以基于CGLIB实现AOP代理,这样所代理的是类而不是接口。如果一个业务对象没有实现某一个接口,那么CGLIB将被使用。

(转载自http://zw.NSEaC.com科教作文网)


我们先来分析一下Spring事务管理机制的实现原理。由于Spring内置AOP默认使用动态代理模式实现,我们就先来分析一下动态代理模式的实现方法。动态代理模式的核心就在于代码中不出现与具体应用层相关联的接口或者类引用,如上所说,这个代理类适用于任何接口的实现。下面我们来看一个例子。
publicclassTxHandlerimplementsInvocationHandler{
privateObjectoriginalObject;
publicObjectbind(Objectobj){
this.originalObject=obj;
returnProxy.newProxyInstance(
obj.getClass().getClassLoader(),
obj.getClass().getInterfaces(),
this);
}
publicObjectinvoke(Objectproxy,Methodmethod,Object[]args)
throwsThrowable{
Objectresult=null;
if(!method.getName().startsWith("save")){
UserTransactiontx=null;
try{
tx=(UserTransaction)(
newInitialContext().lookup("java/tx")
);
result=method.invoke(originalObject,args);
tx.commit();
}catch(Exceptionex){
if(null!=tx){
try{
tx.rollback();
}catch(Exceptione){
}
}
}
}else{
result=method.invoke(originalObject,args);
}
共2页: 1 [2] 下一页 论文出处(作者):
基于UBL和纯XML数据库的EDI系统设计与实现
一种MPEG-2基本流合成节目流的算法
上一篇:电子商务下企业物流模式探析(1) 下一篇:没有了