扩展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对各种数据访问框架的集成机制
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一个开源的Java开发框架,用于构建独立的、可扩展的、基于Spring的应用程序。Spring Security是一个为Java应用程序提供身份认证和授权的框架,它提供了许多安全功能,如用户认证、角色管理和资源访问控制。OAuth2是一种用于授权的开放标准,它允许应用程序通过第三方身份验证服务器来获取访问令牌,以便访问受保护的资源。 要集成Spring Security OAuth2到Spring Boot 3.0的Web API中,需要以下步骤: 1. 添加依赖:在项目的pom.xml文件中添加Spring Security OAuth2的依赖。例如,可以添加以下依赖项: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-oauth2-client</artifactId> </dependency> ``` 2. 配置Spring Security:创建一个配置类,扩展`WebSecurityConfigurerAdapter`,并重写`configure`方法来配置Spring Security。你可以定义用户认证方式和角色管理等配置。 3. 配置OAuth2:创建一个配置类,扩展`WebSecurityConfigurerAdapter`,并重写`configure`方法。在方法中配置OAuth2的相关信息,如认证服务器URL、客户端ID、客户端密码等。 4. 创建资源服务器:创建一个类,注解为`@RestController`,用于提供Web API接口。在方法上使用`@PreAuthorize`注解定义接口的访问权限。 通过以上步骤,你可以将Spring Boot 3.0的Web API和Spring Security OAuth2集成起来。这样,你的应用程序将具有身份认证、角色管理和资源访问控制的功能,并可以使用OAuth2来授权访问受保护的资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值