看了那本叫做<<项目实践精解:基于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
就完成了对业务对象的管理。