spring+hibernate中applicationContext.xml详解

看了那本叫做<<项目实践精解:基于Struts-Spring-Hibernate的Java应用开发>> 

 

对里面的一些概念还不熟悉,一个字"晕"啊,在网上搜搜资料,解释一下applicationcontext.xml

我们以项目中的订单 Order 为例简要说明一下 Spring 与 Hibernate 的集成。关于如何使用 Hibernate 来对数据库表做映射,我们在前面已经做了介绍,这里我们关心的是如何配置 Spring ,使它能管理 Hibernate 。其实,只要在 Spring 的配置文件(我们这里是 applicationContext.xml 中配置一个叫做 sessionFactory bean Spring 就可以和 Hibernate 联系起来了。
<bean id="sessionFactory" class="org.springframework.orm.hibernate.Local SessionFactoryBean">
    <property name="configLocation">
    <value>com/ascent/bean/hibernate.cfg.xml</value>
    </property>
</bean>
样, Spring Hibernate 的第一步整合就完成了,现在到了关键的地方 —如何让 Spring 和 Hibernate 双剑合璧来实现业务逻辑?
还是在 applicationContext.xml 文件中先做一个配置。
<bean id="transactionManager" class="org.springframework.orm.hibernate. HibernateTransactionManager">
    <property name="sessionFactory">
      <ref local="sessionFactory"/>
    </property>
  </bean>
在上面你大概可以感觉到 Spring 给我们带来的好处了, Spring 的 IoC 模式可以统一管理各层,而又使各层松散耦合在一起,使各层之间实现最大的解耦性,这也是 Web 架构一向的追求。
但是, Spring 带来的好处还不止于此,除了 IoC 还有 AOP , Spring 可以运用 AOP 来实现很多功能,最常用的就是事务处理。这里我们用了业务服务( business service )层和数据存取对象( Data Access Object )层,在业务服务层我们增加事务处理,数据存取对象层负责数据读写。
首先,组装配置好 Service Beans 。
<bean id="orderService" class="org.springframework.transaction.interceptor. TransactionProxyFactoryBean">
    <property name="transactionManager">
      <ref local="transactionManager"/>
    </property>
    <property name="target">
      <ref local="orderTarget"/>
    </property>
    <property name="transactionAttributes">
      <props>
        <prop key="find*">PROPAGATION_REQUIRED,readOnly,-OrderException</prop>
        <prop key="save*">PROPAGATION_REQUIRED,-OrderException,-OrderMinimum AmountException</prop>
      </props>
    </property>
  </bean>
之后,需要把业务服务对象和数据存取对象也组装起来,并把这些对象配到一个事务管理器( transaction manager )里。
在 Spring 中的配置信息。
<bean id="orderTarget" class="com.ascent.business.service.OrderServiceImpl">
    <property name="orderDAO">
      <ref local="orderDAO"/>
    </property>
  </bean>
 
<bean id="orderDAO" class="com.ascent.dao.hibernate.OrderHibernateDAO">
    <property name="sessionFactory">
      <ref local="sessionFactory"/>
    </property>
  </bean>
图 6-10 是项目对象搭建的一个提纲。从中可以看出,每个对象都联系着 Spring ,并且能通过 Spring 注入到其他对象。把它与 Spring 的配置文件比较,观察他们之间的关系。
Spring 就是这样基于配置文件,将各个 Bean 搭建在一起的。
这里我们使用一个 TransactionProxyFactoryBean ,它定义了一个 setTransactionManager() ,这个对象很有用,它能很方便地处理你申明的 Service Object 中的事物,你可以通过 transaction Attributes 属性来定义怎样处理。
TransactionProxyFactoryBean 还有个 setter ,这会被业务服务对象( orderTarget )引用, orderTarget 定义了业务服务层,并且它还有个属性,由 setOrderDAO() 引用这个属性。
还有一点要注意, bean 可以用两种方式创造,这些都在单例模式( Sington )和原型模式( propotype )中定义了。默认的方式是 singleton ,这意味着共享的实例将被束缚,而原型模式是在 Spring 用到 bean 的时候允许新建实例的。当每个用户需要得到他们自己 Bean 的 Copy 时,你应该仅使用 prototype 模式。
 
这样, Spring 和 Hibernate 就完成了对业务对象的管理。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值