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

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

反思Spring:由Ruby on Rails想到的

2019-11-18 15:29:31
字體:
供稿:網(wǎng)友

  眾所周知,RoR里面的指導(dǎo)原則有:

  第一條是較小的軟件,這意味著你編寫較少的程序行。程序小就能加速開發(fā),錯(cuò)誤也較少,使得程序較輕易理解、維護(hù)和增強(qiáng)。對(duì)編寫較小程序做出貢獻(xiàn)的Ruby的一個(gè)特性就是它假設(shè)該架構(gòu)本身能夠并應(yīng)該處理元數(shù)據(jù).

  第二條是對(duì)配置的協(xié)定原理,這意味著Rails不用配置文件,而是依靠一些簡(jiǎn)單的編程協(xié)定,讓它通過利用應(yīng)用程序已有的信息和在運(yùn)行的數(shù)據(jù)庫,解決它需要知道什么這個(gè)問題。

  SPRing一個(gè)非常靈活的一個(gè)框架,靈活的同時(shí)也造成了一定的復(fù)雜性。我個(gè)人眼中的spring應(yīng)該從RoR學(xué)到的東西應(yīng)該有:不用寫一行xml語句就可以配置好AOP常規(guī)的事務(wù)治理,約定高于配置。

  當(dāng)前spring支持的事務(wù)治理配置,大體有以下兩種配置方式,為了方便舉例子,所以借用了javaEE技術(shù)專家"江南白衣"的兩段代碼

  (1)、spring2.0版本支持的事務(wù)治理

  代碼:

<bean id="baseTxService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
abstract="true">
<property name="transactionManager" ref="transactionManager"/>
<property name="proxyTargetClass" value="true"/>
<property name="transactionAttributes">
<props>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
</props>
</property>
<property name="preInterceptors">
<list>
<ref bean="methodSecurityInterceptor"/>
</list>
</property>
</bean>

<bean id="bookManager" parent="baseTxService">
<property name="target">
<bean class="org.springside.bookstore.admin.manager.BookManager"/>
</property>
</bean>
  (2)、 spring2.0開始支持事務(wù)治理的新配置

  代碼

<aop:config proxy-target-class="true">
<aop:advisor pointcut="execution(*yourpackagename..*Manager.*(..))" advice-ref="txAdvice"/>
<aop:advisor pointcut="execution(*yourpackagename..*Manager.save(..))" advice-ref="fooAdvice"/>
</aop:config><tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*"/>
<tx:method name="remove*"/>
<tx:method name="*" read-only="true"/>
</tx:attributes>
</tx:advice>
<bean id="bookManager" class="org.springside.bookstore.commons.service.BookManager"/>
  上面的二段配置文件代碼是常用的spring事務(wù)治理配置.

  看完上面的二段代碼的配置,和Ruby on Rails沒有一行配置的ActiveRecord相比差太遠(yuǎn),相對(duì)麻煩拖拉,沒有辦法,暫時(shí)spring實(shí)現(xiàn)中事務(wù)治理主要也只是這兩種方法。

  使用spring通常會(huì)與hibernate/ibatis集成作數(shù)據(jù)訪問層,這也是大多java開發(fā)人員常用字的技術(shù)框架.下面如spring和hibernate結(jié)合做數(shù)據(jù)訪問層,暫時(shí)不討論有泛型存在的情況,只是簡(jiǎn)單舉一個(gè)例子把事務(wù)治理放在數(shù)據(jù)訪問層。下面說出我自己心中理想的spring事務(wù)治理:

  約定高于配置。首先規(guī)定,對(duì)于query,list,show,get,find等開頭的方法采用PROPAGATION_REQUIRED,readOnly級(jí)的事務(wù)定義;而對(duì)于set,save,update,remove,delete等開頭的方法采用PROPAGATION_REQUIRED級(jí)的事務(wù)定義,基本上能滿足大部分開發(fā)的需要。然后只要在需要事務(wù)治理配置的類的前加一句元數(shù)據(jù)即可,例如spring針對(duì)hibernate3開發(fā)的@TransactionAop(hibernate3),類似的有@TransactionAop(hibernate2)、@TransactionAop(ibatis)、@TransactionAop(jdo)之類元數(shù)據(jù)的

  舉一個(gè)例子看一段代碼,其中UserDAO是一個(gè)接口,大家都應(yīng)該看得出來,只加了一行的元數(shù)據(jù)@TransactionAop(hibernate3)就可以使得這一個(gè)UserDAHibernate類有事務(wù)治理的功能,因?yàn)樗姆椒ǚ蟬pring的約定。(當(dāng)然,這不是真的,spring中也沒有這一個(gè)功能,這只是我個(gè)人一點(diǎn)想法提出來而已)

  代碼



發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 英超| 砚山县| 渝中区| 精河县| 阳城县| 桦南县| 始兴县| 沈阳市| 西城区| 襄樊市| 灯塔市| 西吉县| 博罗县| 海林市| 思茅市| 鞍山市| 舒城县| 竹溪县| 泽州县| 讷河市| 福州市| 利川市| 金阳县| 旬阳县| 清水河县| 都江堰市| 江川县| 淳安县| 焦作市| 洪江市| 湘乡市| 濉溪县| 邯郸县| 英超| 太白县| 徐闻县| 永城市| 天气| 汾阳市| 信阳市| 封开县|