国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
反思Spring:由Ruby on Rails想到的

反思Spring:由Ruby on Rails想到的

2006-12-27 15:32 作者: 出處: blog 責(zé)任編輯:方舟
  眾所周知,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ù)庫(kù),解決它需要知道什么這個(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)想法提出來而已)

  代碼

package org.appfuse.dao.hibernate;

import java.util.List;
import org.appfuse.dao.UserDAO;
import org.appfuse.model.User;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
span style="color:blue;"> //假設(shè)有下面這一個(gè)類
import org.springframework.orm.hibernate3.support.annotations.TransactionAop;</span>

<span style="color:blue;">@TransactionAop(hibernate3)</span>
public class UserDAOHibernate extends HibernateDaoSupport implements UserDAO...{

public User getUser(Long userId) ...{
return (User)this.getHibernateTemplate().get(User.class, userId);
}

public List getUsers() ...{
return this.getHibernateTemplate().find("from User");
}

public void removeUser(Long userId) ...{
Object user = this.getHibernateTemplate().load(User.class, userId);
this.getHibernateTemplate().delete(user);
}
public void saveUser(User user) ...{
this.getHibernateTemplate().saveOrUpdate(user);
}
}

  spring的事務(wù)定義很靈活很廣,定義七種的傳播行為和五種的隔離常量,但用得比較多還是PROPAGATION_REQUIRED和PROPAGATION_REQUIRED,readOnly,所以我提出上面所述的一點(diǎn)假想,可以簡(jiǎn)便開發(fā)。

  簡(jiǎn)單就是美
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
如何使用spring聲明式事務(wù)
關(guān)于Spring事務(wù)的面試題 | java面試題
Spring事務(wù)管理 - Java - 課堂 - 話題 - 遲宏澤 - CSDN學(xué)生大本營(yíng)...
Spring?的OpenSessionInViewFilter簡(jiǎn)介
將Spring和Hibernate 與WAS一起使用
在Spring中集成Hibernate事務(wù)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服