1. 程式人生 > >spring+hibernate中applicationContext.xml詳解

spring+hibernate中applicationContext.xml詳解

 

對裡面的一些概念還不熟悉,一個字"暈"啊,在網上搜搜資料,解釋一下applicationcontext.xml

我們以專案中的訂單Order為例簡要說明一下SpringHibernate的整合。關於如何使用Hibernate來對資料庫表做對映,我們在前面已經做了介紹,這裡我們關心的是如何配置Spring,使它能管理Hibernate。其實,只要在Spring的配置檔案(我們這裡是applicationContext.xml中配置一個叫做sessionFactorybeanSpring就可以和Hibernate聯絡起來了。 <bean id="sessionFactory" class="org.springframework.orm.hibernate.Local SessionFactoryBean">
    <property name="configLocation">     <value>com/ascent/bean/hibernate.cfg.xml</value>     </property> </bean> 樣,SpringHibernate的第一步整合就完成了,現在到了關鍵的地方—如何讓SpringHibernate雙劍合璧來實現業務邏輯? 還是在applicationContext.xml檔案中先做一個配置。 <bean id="transactionManager" class="org.springframework.orm.hibernate. HibernateTransactionManager">
    <property name="sessionFactory">       <ref local="sessionFactory"/>     </property>   </bean> 在上面你大概可以感覺到Spring給我們帶來的好處了,SpringIoC模式可以統一管理各層,而又使各層鬆散耦合在一起,使各層之間實現最大的解耦性,這也是Web架構一向的追求。 但是,Spring帶來的好處還不止於此,除了IoC還有AOPSpring可以運用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的時候允許新建例項的。當每個使用者需要得到他們自己BeanCopy時,你應該僅使用prototype模式。 這樣,SpringHibernate就完成了對業務物件的管理。