网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.用java取得linux系统cpu、内存的.
.面向服务架构(SOA)的原则.
.通过WindowsXPEmbedded更新代理应.
.SCJP:“菜鸟”也能玩Java.
.Mophun & J2ME 的游戏开发之旅(八.
.Apache服务器配置全攻略.
.Java 6中新型模态对话框API.
.SWT/JFace入门指南之让SWT程序动.
.使用vector获取页面数值画折线图.
.扩展Eclipse的Java开发工具(四).
.null,this和supper变量.
.JDBC 概述(五).
.让Struts与Hibernate顺利协同工作.
.类反射简化Struts应用程序的开发.
.java中文问题-浅析.
.JDK1.2关于JDBC中文问题的解决方.
.AOP在大规模软件开发项目中的应用.
.Java 网络文件传输.
.对Java嵌套类的讨论(上).
.减法赋值运算符 (-=).

Spring事务处理及其AOP框架的内幕(1)

发表日期:2008-1-5



  Spring框架中成功吸引人的一点就是容器事务的治理,提供了一个轻量级的容器事务处理,针对的对象是普通的Java类,使用Spring事务治理的话,你可以按照自己的业务把一些相关的方法纳入其事务治理里面,这就避免了程序员在处理事务的过程中繁琐的工作.同时这些也是ejb2.X规范里面吸引人的一点,这在spring里面都很好的提供.虽然在跨容器的事务治理,spring里面并没有提供,但是对于一般的web程序来说,也不需要仅仅为了那些功能而不得不使用ejb.不过,最近jboss的嵌入式的ejb容器也可以做的更小了,也是开源中的选择之一.无论技术是怎样发展的,当前,我们先来研究其中AOP实现的方法.

事实上,Spring中的事务处理是通过AOP思想来实现的,Spring AOP与ASPect J和JBoss具有很大的不同,首先,使用Spring AOP框架的用户要记住的一点是,Spring AOP针对的是方法层次上的实现,而其他两者对字段也提供了支持.说到Spring AOP的内幕,其实也不难,对于有接口的类,使用的是Java内部类提供的Proxy;而对于那些不实现接口的类,使用的是cglib库,动态创建一个子类来实现.

在Spring AOP中提供了4种处理切入类型:around,before,after,introdUCtion.顾名思义,

1)around是针对具体的某个切入点的方法(比如,现在有个OrderBook方法,around的切入类型是就这个方法的内部调用,是通过java的元数据,在运行时通过Method.invoke来调用,具有返回值,当发生意外的时候会终止.记住的一点是,返回值.);

2)before是在方法调用前调用(在OrderBook方法前调用,但是没有返回值,同时在通常意外情况下,会继续运行下一步方法.记住的一点是没有返回值);

3)after和before刚好相反,没有什么非凡的地方.

4)introduction是一个更加非凡的,但功能更加强大的切入类型.比如(你现在有Book对象,Computer对象,还有几十个这种业务对象,现在你希望在每个这样的对象中都加入一个记录最后修改的时间.但是你又不希望对每个类都进行修改,因为太麻烦了,同时更重要的一点,破坏了对象的完整性,说不定你以后又不需要这个时间数据了呢...这时怎么办呢?Spring AOP就为你专门实现这种思想提供了一个切入处理,那就是introduction.introduction可以为你动态加入某些方法,这样可以在运行时,强制转换这些对象,进行插入时间数据的动作,更深的内幕就是C++虚函数中的vtable思想).不过这种动态是以性能作为代价的,使用之前要慎重考虑,这里我们谈的是技术,所以就认为他是必需的.

好,现在我们就拿第四种来进行举例说明Spring AOP的强大之处:

1)假设创建了一个BookService接口及其实现方法(你自己的业务对象):

//$ID:BookService.java Created:2005-11-6 by Kerluse Benn

package com.osiris.springaop;

public interface BookService {

public String OrderComputerMagazine(String userName,String bookName);

public String OrderBook(String userName,String bookName);

}

//$ID:BookServiceImpl.java Created:2005-11-6 by Kerluse Benn

package com.osiris.springaop;

public class BookServiceImpl implements BookService{

public String OrderBook(String name,String bookName) {

// TODO Add your codes here

String result=null;

result="订购"+bookName+"成功";

return result;

}

public String OrderComputerMagazine(String userName, String bookName) {

// TODO Add your codes here

String result=null;

result="订购"+bookName+"成功";

return result;

}

}
  Spring框架中成功吸引人的一点就是容器事务的治理,提供了一个轻量级的容器事务处理,针对的对象是普通的java类,使用Spring事务治理的话,你可以按照自己的业务把一些相关的方法纳入其事务治理里面,这就避免了程序员在处理事务的过程中繁琐的工作.同时这些也是ejb2.X规范里面吸引人的一点,这在spring里面都很好的提供.虽然在跨容器的事务治理,spring里面并没有提供,但是对于一般的web程序来说,也不需要仅仅为了那些功能而不得不使用ejb.不过,最近jboss的嵌入式的ejb容器也可以做的更小了,也是开源中的选择之一.无论技术是怎样发展的,当前,我们先来研究其中AOP实现的方法.

事实上,Spring中的事务处理是通过AOP思想来实现的,Spring AOP与Aspect J和JBoss具有很大的不同,首先,使用Spring AOP框架的用户要记住的一点是,Spring AOP针对的是方法层次上的实现,而其他两者对字段也提供了支持.说到Spring AOP的内幕,其实也不难,对于有接口的类,使用的是Java内部类提供的Proxy;而对于那些不实现接口的类,使用的是cglib库,动态创建一个子类来实现.

在Spring AOP中提供了4种处理切入类型:around,before,after,introduction.顾名思义,

1)around是针对具体的某个切入点的方法(比如,现在有个OrderBook方法,around的切入类型是就这个方法的内部调用,是通过java的元数据,在运行时通过Method.invoke来调用,具有返回值,当发生意外的时候会终止.记住的一点是,返回值.);

2)before是在方法调用前调用(在OrderBook方法前调用,但是没有返回值,同时在通常意外情况下,会继续运行下一步方法.记住的一点是没有返回值);

3)after和before刚好相反,没有什么非凡的地方.

4)introduction是一个更加非凡的,但功能更加强大的切入类型.比如(你现在有Book对象,Computer对象,还有几十个这种业务对象,现在你希望在每个这样的对象中都加入一个记录最后修改的时间.但是你又不希望对每个类都进行修改,因为太麻烦了,同时更重要的一点,破坏了对象的完整性,说不定你以后又不需要这个时间数据了呢...这时怎么办呢?Spring AOP就为你专门实现这种思想提供了一个切入处理,那就是introduction.introduction可以为你动态加入某些方法,这样可以在运行时,强制转换这些对象,进行插入时间数据的动作,更深的内幕就是C++虚函数中的vtable思想).不过这种动态是以性能作为代价的,使用之前要慎重考虑,这里我们谈的是技术,所以就认为他是必需的.

好,现在我们就拿第四种来进行举例说明Spring AOP的强大之处:

1)假设创建了一个BookService接口及其实现方法(你自己的业务对象):

//$ID:BookService.java Created:2005-11-6 by Kerluse Benn

package com.osiris.springaop;

public interface BookService {

public String OrderComputerMagazine(String userName,String bookName);

public String OrderBook(String userName,String bookName);

}

//$ID:BookServiceImpl.java Created:2005-11-6 by Kerluse Benn

package com.osiris.springaop;

public class BookServiceImpl implements BookService{

public String OrderBook(String name,String bookName) {

// TODO Add your codes here

String result=null;

result="订购"+bookName+"成功";

return result;

}

public String OrderComputerMagazine(String userName, String bookName) {

// TODO Add your codes here

String result=null;

result="订购"+bookName+"成功";

return result;

}

}
上一篇:IOC详解(1) 人气:608
下一篇:Java文件操作详解 人气:439
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐