花钱的年华

--今天开始成为主站

用户操作
[即时聊天] [发私信] [加为好友]
江南白衣ID:calvinxiu
691415次访问,排名53好友0人,关注者38
calvinxiu的文章
原创 161 篇
翻译 0 篇
转载 0 篇
评论 646 篇
江南白衣的公告

肖桦,江南白衣,
开源项目SpringSide
春天的旁边
发起者

最近评论
calvinxiu:
发版本最痛苦的事情,就是刚发完之后忽然又有了一个比较重要的更新。

推荐大家下载3.0.3.1 (2mb)

1.简化了目录结构,感觉又清爽了不少。
2.消除了最后一块需要逐个Class写配置文件的地方(applicationContext.xml中的sessionFactory的mapping class)。
dreaming:恭喜~
hongyi:还是一头雾水,郁闷,为啥有这么多东东,叫人头大
suncheng_hong:用过appfuse,但springside还没有尝试过。
suncheng_hong:很想尝试一下。
文章分类
    收藏
      相册
      Blog用图
      Friends
      @_@
      Anders小明
      buaawhl
      cac
      canonical
      cctvx1
      david.turing
      femto
      g9
      JohnsonQu
      Michael Chen
      Raimundox
      robbin
      SimonLei
      totodo
      wuyu
      周爱民
      孟岩
      差沙
      庄表伟
      落魄的程序员
      透明
      郁也风
      铁手
      银狐999
      飞云小侠
      存档
      订阅我的博客
      XML聚合  FeedSky
      订阅到鲜果
      订阅到Google
      订阅到抓虾
      订阅到BlogLines
      订阅到Yahoo
      订阅到GouGou
      订阅到飞鸽
      订阅到Rojo
      订阅到newsgator
      订阅到netvibes

      原创 扩展Spring系列(2) ---Spring对各种数据访问框架的集成机制收藏

      新一篇: 简化Spring(1)--配置文件 | 旧一篇: Spring 的微内核与FactoryBean扩展机制

       作者:江南白衣    

              扩展Spring(2) ---Spring对各种数据访问框架的集成机制

           何为数据框架集成。
         数据访问框架原本好好的,Spring都干了什么呢?
         一是用template类封装了数据框架那些资源获取和异常事务处理的废话代码,而且按照自己的意见给出一些增强函数。
         二是将其纳入了Spring的声明式事务管理中。

          对比Spring对Hibernate、JDBC的集成,还有Spring ModulesO/R Broker的集成,发现Spring的DAO框架主要有六个类:
          1.Template
            著名的Template类,用callback机制封装了除业务代码外的所有必要但废话的代码,重新封装了数据框架的API,并再附送一些增强版。

          2.TransactionManager 
            实现PlatformTransactionManager接口,数据访问框架就能与Spring的事务机制(TransactionTemplate或AOP声明式事务)结合。

          重要的类仅以上两个,以下的类都只有少量标准代码,完全可以忽略。
          
      3.DAOSupport
             实际DAO类的基类,负责保持template变量。如果你觉得它破坏了你的类层次结构,完全可以不用。
          4.Accessor
           template类的基类,defining common properties like DataSource and exception translator,也没大用。
          5.Operations
           template所实现的接口,定义template支持的数据访问函数和增强函数,template有多个实现时才有用。
          6.Exception Translate的相关类和函数
           异常翻译,Spring DAO很重视的一个功能。

      Template类的代码
         因为Hibernate本身很复杂,所以HibernateTemplate也不适合畏高晕车的人士如我观看。JDBC简单很多,但JDBCTemplate又忙着增强JDBC的功能,多出好多代码。所以我选O/R broker的集成代码来看,代码一共才280行。
      注:如果不熟O/R broker,可以简单的认为broker=connection, executable = statement ,其余一切同Jdbc。

      1.1主干函数 Execute(BrokerCallback action)
            step1. 获得Connection-- connecton = datasource.getConn();
            step2. 准备Statement -- statement = new Statement(connection);
            step3. 执行Action的回调函数doInBroker(Statement)。这个doInBroker()方法由客户定义,会拿着传入的statement,执行种种操作。
                    
       try
      {
        action.doInBroker(statement );
      }
      catch()
      {
         
      //翻译异常
      }

         1.2 template的API函数
               虽然理论上大家可以直接使用execute(),在匿名内部类里调用数据访问框架的任何API。但java的匿名内部类不比闭包,代码难看无比,所以除了Robbin还没见到其他兄弟提倡直接用execute方法的。
              因此,template也对数据框架的API进行了wrap,封装了用execute(StatementCallback action)来执行这些API的函数,如下段就是wrap 了O/R Broker的execute(String statementID.....)方法:
      public int execute(final String statementID, final String[] paramNames, final Object[] values) throws DataAccessException {
          
      return executeWithIntResult(new BrokerCallback() {
            
      public Object doInBroker(Executable executable) throws BrokerException {
              applyNamedParamsToExecutable(executable, paramNames, values);
              
      return new Integer(executable.execute(statementID));
            }
          });
        }


          另外还提供一些增强型、便利型的API(如selectOne() ,selectMany()),在参数、返回值上极尽变化。

      TransactionManager的代码
         比较复杂,一下说不清。但JDBC的DatasourceTransactionManager和Hibernate的HibernateTransactionManager的代码都很相近,说明这个TransactionManager其实也比较固定埋头狂抄就是了。

          有兴趣的同学,可以响应某大老号召,实现ofbiz与spring的集成:)

      系列文章:
      Spring 的微内核与FactoryBean扩展机制
      扩展Spring(2)--Spring对各种数据访问框架的集成机制

      发表于 @ 2005年09月13日 13:39:00|评论(loading...)|编辑

      新一篇: 简化Spring(1)--配置文件 | 旧一篇: Spring 的微内核与FactoryBean扩展机制

      评论

      #mwofhq@mail.com 发表于2007-09-01 13:55:24  IP: 202.101.105.*
      ynhc etjxpcuz tvnbs hokxy zylh lnqmcjhwo forek
      #fbjy@mail.com 发表于2007-09-01 13:55:35  IP: 84.240.21.*
      csjgylvu gkps kjduyhz sqtzrwbm noigcwler mjoaytf clykfnwst http://www.rwduyson.cfsq.com
      #ystg@mail.com 发表于2007-09-01 13:55:43  IP: 58.142.15.*
      xawlmb jyehuibor qndzpmx fjydma qldniaug hfbkdsmq jchpegd utrzk gyuoix
      发表评论  


      登录
      Csdn Blog version 3.1a
      Copyright © 江南白衣