京山游俠

          專注技術(shù),拒絕扯淡
          posts - 50, comments - 868, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
          在SpringSide的官方主頁上,寫著SpringSide 3 中包含的主流組件:Spring 2.5 + Hibernate 3 + Struts 2 + JSP 2.0 + JQuery + JAX-WS 2 (by Apache CXF 2) +SpringSecurity 2.0。不過,如果你認(rèn)為和SpringSide 2 相比,升級(jí)的只是版本號(hào),那么你就大錯(cuò)特錯(cuò)了。

          像我這樣從SpringSide 2過來的人,如果能夠詳細(xì)對(duì)比SpringSide 2 和SpringSide 3,對(duì)于我們理解SpringSide 3肯定更加有幫助。下面的內(nèi)容是我自己的一些體會(huì),不正確的地方歡迎大家指正。

          從主要的架構(gòu)來,依然是那么幾層,先設(shè)計(jì)數(shù)據(jù)庫,再寫Entity層,再寫Dao層,再寫Action,然后使用JSP表現(xiàn)出來,其中的Entity和Dao層和Hibernate緊密相關(guān),Action是Struts的主要部分,Spring作為粘合劑,把這些東西連在一起,并提供了一些機(jī)制簡(jiǎn)化編寫這些層的工作。SpringSide就是這樣一個(gè)大的粘合體,省去了我們自己很多的粘合工作。從SpringSide 2 到SpringSide 3,這些工作得到進(jìn)一步的簡(jiǎn)化,我們開發(fā)起來就更爽了。

          我認(rèn)為,我們的開發(fā)模式,主要經(jīng)歷了這樣的簡(jiǎn)化過程:
          第一階段,代碼加一大堆的配置文件
          第二階段,代碼加少量的配置文件
          第三階段,代碼加基本上等于零的配置文件

          這些進(jìn)步是如何實(shí)現(xiàn)的呢?從第一階段到第二階段,主要靠的是Annotation,把一些大量的配置工作轉(zhuǎn)移到了Java代碼中,那么從第二階段到第三階段怎么實(shí)現(xiàn)呢?都已經(jīng)Annotation了,你還有什么辦法讓配置文件更少?想不到吧!我也想不到,直到我看了SpringSide 3生成的項(xiàng)目,我才知道還有一個(gè)好東西叫自動(dòng)掃描。

          下面使用實(shí)際的例子進(jìn)行說明。作為示例,Hibernate是個(gè)不錯(cuò)的選擇。

          第一階段,如果單獨(dú)使用Hibernate,我們每寫一個(gè)Entity類,就得同時(shí)寫一個(gè).hbm.xml文件,如果有很多Entity,就得寫很多.hbm.xml文件,每修改一次Entity,也要同時(shí)記得修改.hbm.xml文件,相當(dāng)?shù)牟环奖悖淠夸浗Y(jié)構(gòu)如下圖:
          002.PNG

          第二階段,使用Annotation,SpringSide 2 中就是這樣的方式。具體內(nèi)容可以看我的另一篇博文《打通持久層的任督二脈》。所以我用SpringSide 2? 進(jìn)行開發(fā)的時(shí)候,寫Entity也是兩個(gè)步驟,但是比第一階段要簡(jiǎn)單。就是先寫一個(gè)Entity,Entity里面使用Annotation,如下圖:
          003.PNG

          然后修改配置文件,SpringSide 2 中專門為Hibernate的定義開辟了一個(gè)專門的xml文件dataAccessContext-hibernate.xml,里面關(guān)于SessionFactory的定義是我們很熟悉的。我只需要將我的Entity類加入到里面就可以了,如下圖中紅筆圈出來的部分:
          004.PNG

          第二階段和第一階段相比,配置文件簡(jiǎn)單多了,不需要維護(hù)那么多的.hbm.xml。但是,每編寫一個(gè)Entity,依然需要修改一下配置文件。

          第三階段就更了不起了,零配置文件,也就是說我們只管寫Entity就行了,不需要管配置文件(當(dāng)然,項(xiàng)目開始的時(shí)候還是要配置一次的)。打開SpringSide 3生成的項(xiàng)目,果然找不到dataAccessContext-hibernate.xml文件。那么是如何實(shí)現(xiàn)零配置的呢?靠的就是自動(dòng)掃描,如下圖中紅筆圈出來的部分:
          005.PNG

          上面講Hibernate只是為了舉例說明我的觀點(diǎn),事實(shí)上SpringSide 3 中的零配置可不僅僅只存在這一個(gè)地方。

          Dao層也可以不用配置了。在SpringSide 2 中,我們每寫一個(gè)Dao,都需要在serviceContext.xml中加入這個(gè)類,如下圖:
          006.PNG

          SpringSide 3 中使用自動(dòng)掃描了,如下圖:
          007.PNG

          以后編寫Service后,再也不用修改配置文件了,只要我們?cè)赟ervice中使用如下Annotation:
          008.PNG

          事務(wù)也不用配置了,在SpringSide 2 中,事務(wù)是這樣配置的:
          009.PNG

          SpringSide 3 中,事務(wù)配置是這樣的:
          010.PNG

          011.PNG

          Action也不用配置了,不過使得Action零配置的代碼卻在web.xml中,如下圖:
          012.PNG

          還記得SpringSide 2 中的Struts配置代碼嗎?編寫完Action類的代碼后,還需要修改兩個(gè)配置文件,如下:
          013.PNG

          014.PNG

          所以說,SpringSide 3 的一個(gè)優(yōu)點(diǎn)就是讓生活變得更加簡(jiǎn)單了。在以上的截圖中,SpringSide 2 項(xiàng)目用的是Eclipse 3.2,而SpringSide 3項(xiàng)目用的是Eclipse 3.4 For JavaEE Developers。哪一個(gè)IDE更爽,那也是一目了然。

          評(píng)論

          # re: SpringSide 3 中的新特性  回復(fù)  更多評(píng)論   

          2008-12-05 18:37 by 虎嘯龍吟
          請(qǐng)多寫寫springSide方面的好文

          # re: SpringSide 3 的進(jìn)步[未登錄]  回復(fù)  更多評(píng)論   

          2008-12-05 22:11 by Jimmy
          是阿,期待更多的好文

          # re: SpringSide 3 的進(jìn)步  回復(fù)  更多評(píng)論   

          2008-12-05 23:18 by Elvea
          其實(shí)我想說的,改進(jìn)的主要是Spring 2.5的改進(jìn),SpringSide目前只是一個(gè)很簡(jiǎn)單的Demo,我沒有貶低SS的意思。我個(gè)人很佩服Calvin的,一個(gè)人撐起這么打一片天。
          還有我對(duì)Anotation的事務(wù)很反感,每個(gè)方法都要加上那些注釋,還不如直接在XML上面配來的好。
          我想Spring初學(xué)者的進(jìn)階看SS再好不過了

          # re: SpringSide 3 的進(jìn)步  回復(fù)  更多評(píng)論   

          2008-12-08 11:13 by 徐堯
          springside就是一個(gè)集成的功能,springside3就是升級(jí)了spring而已,改了改配置,springside2才是里程碑

          # re: SpringSide 3 的進(jìn)步  回復(fù)  更多評(píng)論   

          2008-12-18 09:21 by Conan Lee
          在SS2的時(shí)候,hbm.xml其實(shí)也可以這樣配置。
          <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
          <property name="dataSource" ref="dataSource" />
          <property name="hibernateProperties">
          <props>
          <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
          <prop key="hibernate.max_fetch_depth">1</prop>
          <prop key="hibernate.show_sql">true</prop>
          <prop key="hibernate.connection.characterEncoding">utf8</prop>
          <prop key="hibernate.cache.use_query_cache">true</prop>
          <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
          </props>
          </property>
          <property name="mappingDirectoryLocations">
          <list>
          <value>classpath*:/cn/com/webinfo/model</value>
          </list>
          </property>
          </bean>

          # re: SpringSide 3 的進(jìn)步  回復(fù)  更多評(píng)論   

          2008-12-29 11:05 by 什么能力都干寫博客
          其實(shí)就是jar的升級(jí),配置文件稍有變化,除此之外,你說說還有什么。
          其實(shí)這就是spring的升級(jí),和springside有關(guān)系嗎?
          真幼稚,你的技術(shù)只停留在這一層面,對(duì)框架的使用樂此不疲。
          希望你能升級(jí)自己。

          # re: SpringSide 3 的進(jìn)步  回復(fù)  更多評(píng)論   

          2009-01-12 19:08 by 江南白衣
          謝謝游俠的好文,和你一比我就像不會(huì)寫文檔的一樣:)

          的確所有便利都是Spring,Struts2們升級(jí)帶來的,SS3只是與時(shí)俱進(jìn)的更新了自己的演示而已。

          不過這個(gè)開源項(xiàng)目經(jīng)常太監(jiān)的年代,升級(jí)演示也算升級(jí)吧,大家不用這么在乎字眼吧:)

          # re: SpringSide 3 的進(jìn)步[未登錄]  回復(fù)  更多評(píng)論   

          2009-01-15 17:58 by ken
          很不錯(cuò)的文章,謝謝作者的分享。
          給:什么能力都干寫博客
          這些升級(jí)對(duì)于您的技術(shù)水平自然是不值一提,但相信還是對(duì)很多人有幫助的。相對(duì)于樓主的技術(shù)水平,我相信您的道德水平擁有更大的升級(jí)空間,不妨與樓主功勉,一起升級(jí)一下。

          # re: SpringSide 3 的進(jìn)步  回復(fù)  更多評(píng)論   

          2009-01-15 18:40 by yzl45
          @什么能力都干寫博客
          你這人真垃圾,人家也就是只是共享,你啥都不寫,啥也不說,就知道諷刺別人,先正人品,在來做技術(shù),再次鄙視你一下!

          # re: SpringSide 3 的進(jìn)步  回復(fù)  更多評(píng)論   

          2009-02-20 16:01 by gaozh
          真不錯(cuò),非常感謝你的分享

          # re: SpringSide 3 的進(jìn)步  回復(fù)  更多評(píng)論   

          2009-03-24 09:31 by 無聊的人
          仔細(xì)看了看,覺得跟rapid-framework差不多

          # re: SpringSide 3 的進(jìn)步  回復(fù)  更多評(píng)論   

          2009-03-25 09:18 by 初學(xué)者
          你到底懂不懂springside這些都是spring2.5里的好不好?是spring2.0的一個(gè)升級(jí)。不知道不要亂講。

          # re: SpringSide 3 的進(jìn)步  回復(fù)  更多評(píng)論   

          2009-04-29 16:48 by bjliuming
          好文章,謝謝!

          # re: SpringSide 3 的進(jìn)步  回復(fù)  更多評(píng)論   

          2009-04-30 16:18 by 謝謝
          難得把自己的體會(huì)寫的這么詳細(xì)的。
          看了很感動(dòng)。
          “2009-03-25 09:18 by 初學(xué)者”這種不懂得尊重別人勞動(dòng)成果的垃圾有多遠(yuǎn)就滾多遠(yuǎn)。

          # re: SpringSide 3 的進(jìn)步  回復(fù)  更多評(píng)論   

          2009-06-30 20:37 by 學(xué)習(xí)
          暈,罵人的人真不好。
          提供這么個(gè)項(xiàng)目骨架,你們也說三道四的。

          # re: SpringSide 3 的進(jìn)步  回復(fù)  更多評(píng)論   

          2009-07-27 10:19 by 謝謝分享
          看完了不回復(fù)一下不厚道,罵人的更不厚道。

          # re: SpringSide 3 的進(jìn)步  回復(fù)  更多評(píng)論   

          2009-08-17 14:29 by 游客
          支持樓主,鄙視罵人的人
          springside本來就是根據(jù)spring來的,看命名就知道了,那些罵人的人,你們太不尊重人家的勞動(dòng)成果了。spring不也是依賴了一大堆開源包嗎!!

          # re: SpringSide 3 的進(jìn)步[未登錄]  回復(fù)  更多評(píng)論   

          2009-12-12 12:06 by 路人甲
          感謝樓主的分享!
          樓主大可不必在乎,那些‘自以為是’的 人的辱罵。
          支持你們的人大有人在,期待著你們進(jìn)步和突破。

          # re: SpringSide 3 的進(jìn)步  回復(fù)  更多評(píng)論   

          2009-12-23 13:39 by study
          支持樓主。學(xué)習(xí)了。
          那些罵人的人,需要先尊重別人,才能得到別人的尊重。

          # re: SpringSide 3 的進(jìn)步  回復(fù)  更多評(píng)論   

          2010-03-04 21:48 by 匿名
          很不錯(cuò)的資源~~
          學(xué)習(xí)了··

          # re: SpringSide 3 的進(jìn)步  回復(fù)  更多評(píng)論   

          2010-03-31 10:13 by 游客
          springside,我擁護(hù)你!

          # re: SpringSide 3 的進(jìn)步[未登錄]  回復(fù)  更多評(píng)論   

          2010-04-09 13:26 by Mark
          強(qiáng)烈支持博主!

          # re: SpringSide 3 的進(jìn)步  回復(fù)  更多評(píng)論   

          2010-04-12 20:17 by adess
          收藏,不錯(cuò)。
          不知道大家有沒注意到,用struts2作查詢時(shí),中文會(huì)顯示亂碼?是如何解決這個(gè)問題的,我用的是springside3, utf-8.

          # re: SpringSide 3 的進(jìn)步[未登錄]  回復(fù)  更多評(píng)論   

          2010-06-04 22:05 by kevin
          這個(gè)年代有能力的人大有人在,但把自己所知道的寫出來,分享出來的人是很欠缺的。

          支持所有別人在休息玩耍他們默默在做奉獻(xiàn)的人們。

          # re: SpringSide 3 的進(jìn)步  回復(fù)  更多評(píng)論   

          2010-06-08 23:59 by qzh
          謝謝樓主分享,

          # re: SpringSide 3 的進(jìn)步[未登錄]  回復(fù)  更多評(píng)論   

          2010-07-25 11:26 by leo
          很好

          # re: SpringSide 3 的進(jìn)步  回復(fù)  更多評(píng)論   

          2010-08-04 15:42 by cafe
          對(duì)比講解,清晰明了。
          支持分享自己的經(jīng)驗(yàn),謝謝分享。

          # re: SpringSide 3 的進(jìn)步[未登錄]  回復(fù)  更多評(píng)論   

          2010-09-26 11:21 by Lee
          謝謝你的付出,鄙視罵人者

          # re: SpringSide 3 的進(jìn)步  回復(fù)  更多評(píng)論   

          2010-10-17 11:05 by skyxjy
          好文,樓主辛苦了

          # re: SpringSide 3 的進(jìn)步  回復(fù)  更多評(píng)論   

          2010-10-25 10:38 by mao
          <property name="packagesToScan" value="xxxxx" />
          <context:component-scan base-package="xxxx" />
          問下樓主,像這倆個(gè)自動(dòng)掃描,如果有多個(gè)不同的包放Entity和dao,可以寫多個(gè)這樣的配置嗎?怎么區(qū)別在不同的包下放entity?

          # re: SpringSide 3 的進(jìn)步[未登錄]  回復(fù)  更多評(píng)論   

          2010-11-04 17:35 by 劉強(qiáng)
          支持樓主,寫很好。 希望樓主多出點(diǎn)關(guān)于這方的資料。
          謝謝樓主。

          # re: SpringSide 3 的進(jìn)步[未登錄]  回復(fù)  更多評(píng)論   

          2010-12-08 08:36 by 如夢(mèng)初醒
          能夠分享自己的經(jīng)驗(yàn)、提出見解就是一種精神,值得尊重。BS暴粗口的。

          # re: SpringSide 3 的進(jìn)步  回復(fù)  更多評(píng)論   

          2011-12-04 13:06 by jamcson
          一直關(guān)注ss的成長(zhǎng)
          主站蜘蛛池模板: 潜江市| 浮梁县| 富宁县| 武威市| 广灵县| 静海县| 苏尼特右旗| 华容县| 桂东县| 壤塘县| 舞阳县| 临泽县| 万载县| 龙州县| 治县。| 高邑县| 宁海县| 武平县| 嘉定区| 南丹县| 康定县| 榆中县| 玛纳斯县| 砀山县| 大田县| 湖州市| 海淀区| 镇原县| 奉节县| 武平县| 乳源| 大新县| 新源县| 白水县| 淄博市| 子洲县| 阳城县| 兖州市| 万全县| 慈利县| 大竹县|