动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
电脑书籍下载:程序设计书籍 | 数据库教程书籍 | 平面与多媒体书籍 | 网络通讯书籍 | 系统管理书籍 | 网络安全书籍 | 认证考试书籍
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教程 ]的信息



本月文章推荐
.使用Java中的Date和Calendar类.
.call 方法.
.Eclipse插件开发快速入门.
.一个项目经理在失败的项目得到的.
.实现Swing的JTables和Excel间的复.
.Java的多进程运行模式分析.
.多线程.
.Java线程.
.为Web应用建立基于JMX的管理系统.
.java变量的赋值与传递.
.typeof 运算符.
.在S1AS7中配置MySQL(支持CMP).
.通过java提供的URL类包读取网上的.
.java设计模式之Template(算法的骨.
.在JavaScript程序中整合Java函数.
.用J2SE 1.4进行Internet安全编程.
.Wireless Messaging API.
.多处理器平台上J2EE应用的内存争.
.java 2 十大经典书籍.
.当修改final值时要重新编译类.

开源技术:将系统移植到Spring

发表日期:2008-1-5 |


摘要:

    作者将在这篇文章中分享他在这个试验中的想法和发现。作者将清楚的说明他是怎样用Spring组件替换参考应用中的单态注册,JDBC代码,和web的前后端层。作者也会描述他碰到的一个问题还有他是怎样来解决它的。

    叫我来参加会议晚了,就是这次的Spring框架会议。对于你们后来的人来讲,Spring已经是一个在Apache 2.0许可下发布的基础构造代码库。它的核心是一个反转控制容器,在容器的外部开发组已经创建了JDBC和JMS代码的样板文件模板,一个web MVC框架,和其他组件。

    我之所以参加这个会议晚是因为我不管Spring的成熟度和公开度,我都对它花了很长的时间进行了测试。我的问题是:"Spring到底能给我带来什么?",为了找到答案,我用Spring的组件替换了现有的一个应用的内脏。通过这次替换我懂得了:我在很早以前就应该用Spring了;应用程序的代码已经没有以前那么混乱了,调试和扩展也更加轻易,并且变的更轻因为我能够开发一些通用的辅助代码来配合Spring。

    我将在这篇文章中分享我在这个试验中的想法和发现。我将清楚的说明我是怎样用Spring组件替换参考应用中的单态注册,JDBC代码,和web的前后端层。我也会描述我碰到的一个问题还有我是怎样来解决它的。

    接下来的内容不需要你是一个Spring的专家,我会在后面给出Spring资源链接。样例代码在Linux上Spring 1.2.X和JDK1.5.0_07下已通过测试。

原始(旧的)代码

    我不想通过制作一个鲜活的应用来进行试验,所以我从另外一篇文章中摘录下我的测试程序。这是一个有2个servlet页面控制器作为入口点的简单的java web应用。servlets通过DAO的方式访问数据库,DAO从本地数据源取得数据库链接。关联对象通过单态注册方式来相互取得。具体有:
SimpleDAO: 从数据库读出和写入信息对象
DbUtil: 方便程序使用JDBC ResultSets, Connections等等。
ObjectRegistry: 单态注册类,对象之间可以通过它彼此取得。
SetupDataSourceContextListener: 设置JDBC数据源
SetupDBContextListener: 预备(植入的)数据库
GetDataServlet: 页面控制器用来显示数据
PutDataServlet: 页面控制器用来存储数据

    这是一个非常简单的应用程序,但它是完全独立的并且展现了一个多层应用程序的行为。这个小型试验的一些观测资料可用于由真实世界转换的工程应用中。

修改内脏:对象注册

首先来分析ObjectRegistry类,它是关系型对象粘合层。

package pool_test.util ;
public class ObjectRegistry {
  private static ObjectRegistry _instance =    new ObjectRegistry() ;
  public static ObjectRegistry getInstance(){
    return( _instance ) ;
  }
  private Map _singletons ;
  public void put(final String key , final Object obj){
    _singletons.put( key , obj ) ;
  }
  public Object get( final String key ){
    return( _singletons.get( key ) ) ;
  }
}



    ObjectRegistry 实际上是一个String:Object键值对的一个Map.你可以将一个对象注册在一个地方(put()方法),然后在另外的地方得到这个对象(get()方法)。用注册可以削弱对象依靠因为代码可以仅仅通过它的通用类型(接口或超类)和查找要害字得到一个对象。而细节-实现,实例化和配置-就留给这段调用put()方法存储对象的代码。

    它能工作,而且我发现它工作比较频繁,但它并不完美。缺少put()或者将它放错地方可能会引起空指针错误或栈溢出错误。你必须跟踪对象被存储注册的次序,为了确保你不会试图取的一个不存在的对象。像我在这做的一样,在小的应用中用ContextListener(一个监听器)处理实例化命令,但是在一个大的应用中可能就需要你努力去避免一些问题。

    旧的单态注册的另一个问题是暴露的put()操作是java调用?意思是说:一个存储的对象实现的变更需要重新编译注册类-比如为了测试存根你想替换基于数据库的DAO。我以前犯过一个小错误,产品应用中用了DAO 的stub(这里不知道译成什么意思好?)。在一个比较大的应用中,它可能很难捕捉到,因为它被隐藏在代码里了。
写点Spring代码就能处理这些缺点。这是新的注册类:

package pool_test.util ;
import org.springframework....ApplicationContext ;
import org.springframework....ClasspathXMLApplicationContext ;
public class ObjectRegistry {
  private ApplicationContext _singletons ;
  private ObjectRegistry(){
    _singletons = new ClassPathXmlApplicationContext(
        new String[] { "spring-objectregistry.xml" }
      );
  }
  public Object get( final String key ){
    return( _singletons.getBean( key ) ) ;
  }
}


上一篇:JTextArea中显示LineNumber 人气:479
下一篇:VBArray 对象 人气:289
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-7-25 WikyBlog v1.7.0.1 多国语言版
2008-7-25 乐彼网上开店系统(56770 Eshop)
2008-7-25 赛特网站管理系统sitecms v3.6.0
2008-7-25 Modoer多功能点评系统 v1.0.1 Bu
2008-7-25 Shangducms Teamsuit! v1.1.0 开
2008-7-25 幻影动漫网视频系统(Ppdong) v1.
2008-7-25 acteecompany企业网站建设系统 v
2008-7-25 恒浪整合管理系统 ims v4.1 ACCE
2008-7-25 艺术图库系统 v1.0 beta
2008-7-19 UltraEdit 简体中文增强版 14.10
2008-7-19 CentOS 5.2 i386 LiveCD
2008-7-19 Snapture多功能相机 v1.4
2008-7-19 iAcces中文输入法 v1.0Build016
2008-7-19 Cookbook烹饪秘籍 v2.5
2008-7-19 苹果专用DVD转换工具 v1.1.59汉化
2008-7-19 Modem修复软件ZiPhone修改版04.0
2008-7-19 AgileMessenger即时通讯工具美化
2008-7-19 Sketches画图软件 v0.7b6破解版


  发表评论
姓 名: 验证码:
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵