国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

applicationContext.xml詳解

2019-11-15 00:43:15
字體:
供稿:網(wǎng)友
applicationContext.xml詳解

想必用過SPRing的程序員們都有這樣的感覺,Spring把邏輯層封裝的太完美了(個(gè)人感覺View層封裝的不是很好)。以至于有的初學(xué)者都不知道Spring配置文件的意思,就拿來用了。所以今天我給大家詳細(xì)解釋一下Spring的applicationContext.xml文件。Ok,還是通過代碼加注釋的方式為大家演示:

以下是詳解Spring的applicationContext.xml文件代碼:<!-- 頭文件,主要注意一下編碼 -->

[html]view plaincopyprint?
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <!DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN//EN""http://www.springframework.org/dtd/spring-beans.dtd">
  3. <beans>

<!-- 建立數(shù)據(jù)源 -->

[html]view plaincopyprint?
  1. <beanid="dataSource"class="org.apache.commons.dbcp.BasicDataSource">

<!-- 數(shù)據(jù)庫驅(qū)動(dòng),我這里使用的是MySQL數(shù)據(jù)庫 -->

[html]view plaincopyprint?
  1. <propertynamepropertyname="driverClassName">
  2. <value>com.mysql.jdbc.Driver</value>
  3. </property>

<!-- 數(shù)據(jù)庫地址,這里也要注意一下編碼,不然亂碼可是很郁悶的哦! -->

[html]view plaincopyprint?
  1. <propertyname="url">
  2. <value>
  3. jdbc:mysql://localhost:3306/tie?useUnicode=true&characterEncoding=utf-8
  4. </value>
  5. </property>

<!-- 數(shù)據(jù)庫的用戶名 -->

[html]view plaincopyprint?
  1. <propertyname="username">
  2. <value>root</value>
  3. </property>

<!-- 數(shù)據(jù)庫的密碼 -->

[html]view plaincopyprint?
  1. <propertyname="passWord">
  2. <value>123</value>
  3. </property>
  4. </bean>

<!-- 把數(shù)據(jù)源注入session工廠 -->

[html]view plaincopyprint?
  1. <beanid="sessionFactory"
  2. class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  3. <propertyname="dataSource">
  4. <refbean="dataSource"/>
  5. </property>

<!-- 配置映射文件 -->

[html]view plaincopyprint?
  1. <propertyname="mappingResources">
  2. <list>
  3. <value>com/alonely/vo/User.hbm.xml</value>
  4. </list>
  5. </property>
  6. </bean>

<!-- 把Session工廠注入給hibernateTemplate --><!-- 解釋一下hibernateTemplate:hibernateTemplate提供了很多方便的方法,在執(zhí)行時(shí)自動(dòng)建立 HibernateCallback 對(duì)象,例如:load()、get()、save、delete()等方法。 -->

[html]view plaincopyprint?
  1. <beanid="hibernateTemplate"
  2. class="org.springframework.orm.hibernate3.HibernateTemplate">
  3. <constructor-arg>
  4. <reflocal="sessionFactory"/>
  5. </constructor-arg>
  6. </bean>

<!-- 把DAO注入給Session工廠 -->

[html]view plaincopyprint?
  1. <beanid="userDAO"class="com.alonely.dao.UserDAO">
  2. <propertyname="sessionFactory">
  3. <refbean="sessionFactory"/>
  4. </property>
  5. </bean>

<!-- 把Service注入給DAO -->

[html]view plaincopyprint?
  1. <beanid="userService"class="com.alonely.service.UserService">
  2. <propertyname="userDAO">
  3. <reflocal="userDAO"/>
  4. </property>
  5. </bean>

<!-- 把Action注入給Service -->

[html]view plaincopyprint?
  1. <beanname="/user"class="com.alonely.struts.action.UserAction">
  2. <propertyname="userService">
  3. <refbean="userService"/>
  4. </property>
  5. </bean>
  6. </beans>

以上Spring的applicationContext.xml文件我是用的SSH架構(gòu),如果您用Spring的MVC架構(gòu),其原理也是一樣的。

對(duì)里面的一些概念還不熟悉,一個(gè)字"暈"啊,在網(wǎng)上搜搜資料,解釋一下applicationcontext.xml

我們以項(xiàng)目中的訂單Order為例簡(jiǎn)要說明一下Spring與Hibernate的集成。關(guān)于如何使用Hibernate來對(duì)數(shù)據(jù)庫表做映射,我們?cè)谇懊嬉呀?jīng)做了介紹,這里我們關(guān)心的是如何配置Spring,使它能管理Hibernate。其實(shí),只要在Spring的配置文件(我們這里是applicationContext.xml)中配置一個(gè)叫做sessionFactory的bean,Spring就可以和Hibernate聯(lián)系起來了。

[html]view plaincopyprint?
  1. <beanidbeanid="sessionFactory"class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
  2. <propertyname="configLocation">
  3. <value>com/ascent/bean/hibernate.cfg.xml</value>
  4. </property>
  5. </bean>

這樣,Spring和Hibernate的第一步整合就完成了,現(xiàn)在到了關(guān)鍵的地方——如何讓Spring和Hibernate雙劍合璧來實(shí)現(xiàn)業(yè)務(wù)邏輯?

還是在applicationContext.xml文件中先做一個(gè)配置。

[html]view plaincopyprint?
  1. <beanidbeanid="transactionManager"class="org.springframework.orm.hibernate.HibernateTransactionManager">
  2. <propertyname="sessionFactory">
  3. <reflocal="sessionFactory"/>
  4. </property>
  5. </bean>

在上面你大概可以感覺到Spring給我們帶來的好處了,Spring的IoC模式可以統(tǒng)一管理各層,而又使各層松散耦合在一起,使各層之間實(shí)現(xiàn)最大的解耦性,這也是Web架構(gòu)一向的追求。

但是,Spring帶來的好處還不止于此,除了IoC還有AOP,Spring可以運(yùn)用AOP來實(shí)現(xiàn)很多功能,最常用的就是事務(wù)處理。這里我們用了業(yè)務(wù)服務(wù)(business service)層和數(shù)據(jù)存取對(duì)象(Data access Object)層,在業(yè)務(wù)服務(wù)層我們?cè)黾邮聞?wù)處理,數(shù)據(jù)存取對(duì)象層負(fù)責(zé)數(shù)據(jù)讀寫。

首先,組裝配置好Service Beans。

[html]view plaincopyprint?
  1. <beanidbeanid="orderService"class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
  2. <propertyname="transactionManager">
  3. <reflocal="transactionManager"/>
  4. </property>
  5. <propertyname="target">
  6. <reflocal="orderTarget"/>
  7. </property>
  8. <propertyname="transactionAttributes">
  9. <props>
  10. <propkeypropkey="find*">PROPAGATION_REQUIRED,readOnly,-OrderException</prop>
  11. <propkeypropkey="save*">PROPAGATION_REQUIRED,-OrderException,-OrderMinimumAmountException</prop>
  12. </props>
  13. </property>
  14. </bean>

之后,需要把業(yè)務(wù)服務(wù)對(duì)象和數(shù)據(jù)存取對(duì)象也組裝起來,并把這些對(duì)象配到一個(gè)事務(wù)管理器(transaction manager)里。

在Spring中的配置信息。

[html]view plaincopyprint?
  1. <beanidbeanid="orderTarget"class="com.ascent.business.service.OrderServiceImpl">
  2. <propertyname="orderDAO">
  3. <reflocal="orderDAO"/>
  4. </property>
  5. </bean>
  6. <beanidbeanid="orderDAO"class="com.ascent.dao.hibernate.OrderHibernateDAO">
  7. <propertyname="sessionFactory">
  8. <reflocal="sessionFactory"/>
  9. </property>
  10. </bean>

每個(gè)對(duì)象都聯(lián)系著Spring,并且能通過Spring注入到其他對(duì)象。把它與Spring的配置文件比較,觀察他們之間的關(guān)系。

Spring就是這樣基于配置文件,將各個(gè)Bean搭建在一起的。

這里我們使用一個(gè)TransactionProxyFactoryBean,它定義了一個(gè)setTransactionManager(),這個(gè)對(duì)象很有用,它能很方便地處理你申明的Service Object中的事物,你可以通過transaction Attributes屬性來定義怎樣處理。

TransactionProxyFactoryBean還有個(gè)setter,這會(huì)被業(yè)務(wù)服務(wù)對(duì)象(orderTarget)引用,orderTarget定義了業(yè)務(wù)服務(wù)層,并且它還有個(gè)屬性,由setOrderDAO()引用這個(gè)屬性。

還有一點(diǎn)要注意,bean可以用兩種方式創(chuàng)造,這些都在單例模式(Sington)和原型模式(propotype)中定義了。默認(rèn)的方式是singleton,這意味著共享的實(shí)例將被束縛,而原型模式是在Spring用到bean的時(shí)候允許新建實(shí)例的。當(dāng)每個(gè)用戶需要得到他們自己Bean的Copy時(shí),你應(yīng)該僅使用prototype模式。

這樣,Spring和Hibernate就完成了對(duì)業(yè)務(wù)對(duì)象的管理。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 南平市| 遂平县| 岳阳市| 晋宁县| 泸西县| 额济纳旗| 永昌县| 宜昌市| 奎屯市| 岚皋县| 时尚| 鹤庆县| 英山县| 闽侯县| 涡阳县| 东丰县| 汶川县| 缙云县| 庆云县| 林州市| 莱西市| 林甸县| 洪湖市| 鹿邑县| 鄂托克旗| 应城市| 平阳县| 哈密市| 康乐县| 嘉峪关市| 柯坪县| 江达县| 宣威市| 商都县| 汾阳市| 鸡东县| 辽阳县| 勃利县| 汉沽区| 佛坪县| 荔浦县|