`
江南白衣
  • 浏览: 550874 次
  • 来自: 广州
社区版块
存档分类
最新评论

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

阅读更多
 作者:江南白衣    

        扩展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对各种数据访问框架的集成机制

 

分享到:
评论

相关推荐

    Spring框架(spring-framework-5.2.6.RELEASE)的jar包

    2. **Data Access/Integration**:这个模块支持数据访问,包括JDBC、ORM(Object-Relational Mapping)、OXM(Object-XML Mapping)和JMS(Java Message Service)。例如,Spring JDBC提供了一层抽象,简化了数据库...

    spring-cglib-repack-3.2.6.jar和spring-objenesis-repack-2.6.jar

    在实际开发中,理解这些底层机制可以帮助开发者更好地利用Spring框架,解决复杂的应用场景,提高开发效率。因此,对于Spring开发者来说,熟悉CGlib和Objenesis的工作原理和应用场景是非常必要的。

    struts2-spring-plugin-2.2.1.jar

    Struts2-Spring-Plugin-2.2.1.jar 是一个专门为 Struts2 框架与 Spring 框架集成而设计的插件。这个插件的主要目的是简化在基于Struts2的应用程序中整合Spring的功能,如依赖注入(DI)、AOP(面向切面编程)以及...

    spring-framework-master

    2. **数据访问/集成**:如JDBC、ORM(Object-Relational Mapping)和OXM(Object-XML Mapping)模块,提供了对数据库操作的支持,如Hibernate和MyBatis的集成。 3. **Web模块**:包含Web和Web-Servlet模块,为基于...

    spring-context-3.2.0 spring-core-3.2.0 等齐全的Spring jar包

    Spring框架是Java开发中最常用的轻量级开源框架之一,它为构建企业级应用程序提供了全面的编程和配置模型。这里提到的是一组完整的Spring库,包括`spring-core`、`spring-context`、`spring-webmvc`、`spring-web`、...

    spring-context-support-4.2.2.RELEASE.jar 的jar包

    总结来说,`spring-context-support`是Spring框架中一个不可或缺的部分,它为开发者提供了丰富的工具和API,帮助实现各种企业级服务的集成,如定时任务、邮件服务、消息队列等。通过深入理解和熟练运用这一模块,...

    spring-web-5.2.3.RELEASE和spring-webmvc-5.2.3.RELEASE

    Spring框架是Java开发中最常用的开源框架之一,它极大地简化了企业级应用的开发工作。Spring Web模块和Spring Web MVC模块是Spring框架中的两个关键组成部分,它们在构建Web应用程序时起着至关重要的作用。 Spring ...

    spring导入eclipse时少的spring-cglib-repack-3.2.4.jar和spring-objenesis-repack-2.4.jar

    在Spring框架的开发环境中,Eclipse或Myclipse作为主流的集成开发环境(IDE)被广泛使用。然而,有时候在导入Spring项目时,可能会遇到一些问题,例如标题中提到的"spring-cglib-repack-3.2.4.jar"和"spring-...

    Spring-session2整合spring5+redis

    标题中的“Spring-session2整合spring5+redis”指的是在Spring框架的第五个主要版本(Spring 5)中,集成Spring Session 2与Redis数据库来管理Web应用的会话(Session)。Spring Session是一个开源项目,旨在提供一...

    struts2-spring-plugin-2.0.11.1.jar

    Struts2-Spring-Plugin-2.0.11.1.jar 是一个专门为Apache Struts2框架设计的插件,其主要目的是实现Struts2与Spring框架的集成。这个插件使得开发者能够在Struts2应用中无缝地使用Spring进行依赖注入(Dependency ...

    spring-aop-jar

    在IT领域,Spring框架是一个广泛使用的Java应用框架,它提供了许多功能,包括依赖注入、面向切面编程(AOP)等。"spring-aop-jar"这个主题涉及到Spring框架中的核心组件之一——Spring AOP。这里我们将深入探讨...

    spring-framework-4.3.30.RELEASE-dist.zip

    2. **libs文件夹**:包含了一系列的jar包,这些jar包是Spring框架的核心库。每个jar包都有特定的功能,例如`spring-context`负责上下文管理,`spring-beans`处理Bean的生命周期,`spring-web`支持Web应用程序,还有...

    spring-aop-3.0.xsd spring-beans-3.0 spring-context-3.0.xsd spring-mvc-3.1.xsd

    Spring 框架是 Java 开发中的核心框架之一,它为构建可维护、模块化的应用程序提供了强大的支持。在提供的信息中,我们关注的是 Spring 的一些关键组件和它们对应的 XML 配置文件,这些文件通常用于定义和管理 ...

    spring-aop-5.1.0.RELEASE.jar

    spring-**cntext**-4.3.6.RELEASE.jar:spring提供了基础IOC功能上的扩展服务,提供了很多企业级服务的支持,如邮件服务,任务调度,JNDI定位,EJB集成,远程访问,缓存以及各种试图层框架的封装等。 spring-...

    struts2-spring-plugin-2.3.4.jar

    Struts2-Spring-Plugin-2.3.4.jar 是一个专门为 Struts 2 框架和 Spring 框架整合而设计的插件,主要用于处理 Struts 2 和 Spring 之间的集成问题。在Java Web开发中,这两个框架经常一起使用,Spring 提供了依赖...

    官方完整包 spring-framework-5.3.7.RELEASE-dist.zip

    - **spring-5.3.7-dist.zip**:可能包含Spring框架的所有核心模块和扩展模块,供开发环境使用。 - **spring-5.3.7-docs.zip**:包含完整的官方文档,包括用户指南、参考手册和API文档,是学习和开发过程中的重要...

    spring-modules-0.9.zip

    Spring Modules是针对Spring框架的一系列扩展工具和模块,旨在增强Spring的功能并促进其与其他开源项目的无缝集成。这个压缩包"spring-modules-0.9.zip"包含了0.9版本的Spring Modules,它在早期的Spring生态中扮演...

    SSH\\others\\struts2-spring-plugin-2.2.1.jar

    在给定的压缩包文件中,我们关注的是"struts2-spring-plugin-2.2.1.jar",这是一个插件,它将Struts2框架与Spring框架集成。 Struts2 Spring Plugin是Struts2框架的一个重要组成部分,它的主要作用是允许开发者在...

    spring-security-oauth2源码

    Spring Security OAuth2 是一个强大的框架,用于为Java应用提供OAuth2和OpenID Connect安全功能。OAuth2是一个授权框架,允许第三方应用在用户许可的情况下访问其受保护的资源,而OpenID Connect则是在OAuth2之上...

    官方原版源码spring-framework-5.1.4.RELEASE.zip

    同时,Spring Data项目也得到了更新,增强了对各种数据库的访问支持,包括JPA、MongoDB、Cassandra等,使得数据访问更加便捷。 此外,Spring MVC作为Spring的Web层组件,5.1.4版本在RESTful服务支持上做了很多工作...

Global site tag (gtag.js) - Google Analytics