<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-67  評論-522  文章-0  trackbacks-0
        在前兩章我為大家詳細(xì)分析了JAR包的選擇和必須的配置文件,那么這一章,我就對例子的層次結(jié)構(gòu)進(jìn)行說明,并實(shí)現(xiàn)除WEB層的功能代碼。
        第三部分:建立框架代碼

        工程結(jié)構(gòu)

        
        大家可以看到,本例一共分為:dao、entity、service、web四層。另外在這些層次下,還以業(yè)務(wù)功能再進(jìn)行分包,這樣做是為了方便在以后的功能擴(kuò)展中,能更好的管理和維護(hù)代碼。如果將所有類都直接集中在這4個包下面,隨著類的增加,會越來越難以維護(hù),而且查找起來也很費(fèi)勁。
        HibernateDao
        在本例中,我是通過繼承Spring提供的HibernateDaoSupport來實(shí)現(xiàn)持久層的基類。同時引入泛型參數(shù),封裝了一些基本操作方法。

        
        這是HibernateDao的部分代碼,引入的這個泛型參數(shù),其實(shí)就是實(shí)體類(User、Role)。通過傳遞這個實(shí)體類,在構(gòu)造方法中利用反射特性將它從JVM中取出來。
        
        這里的getClass()方法是獲得繼承HibernateDao的類(UserDao、RoleDao
        getGenericSuperclass()方法就是通過這些繼承了HibernateDao的類,來得到父類(父類就是HibernateDao)的泛型。注意這個方法的返回值為Type,這是一個類型接口。請參考API。
        因?yàn)樵诶^承HibernateDao 的時候,會給它加一個泛型參數(shù)。比如,User、Role實(shí)體類。因此超類是參數(shù)化類型,所以返回的 Type 對象包含所使用的實(shí)際類型參數(shù)。這里返回的Type對象是ParameterizedType接口的實(shí)現(xiàn)類ParameterizedTypeImpl所以要將返回類型轉(zhuǎn)型為ParameterizedType。
        getActualTypeArguments()方法是ParameterizedType接口中的,它的作用就是獲得實(shí)際類型參數(shù) Type 對象的數(shù)組,因?yàn)槲覀冞@里只定義了一個泛型參數(shù),數(shù)組里面也只有一個值,所以需要在數(shù)組下標(biāo)處填0。然后最后一步轉(zhuǎn)型千萬別忘記了,因?yàn)檫@個方法返回的可是一個Type數(shù)組喔。
        如果對于這部分的說明還有點(diǎn)不理解的話,請到時候有了代碼,設(shè)個斷點(diǎn)跟蹤一下,就會全部清楚了。關(guān)于java反射,它已經(jīng)超出本文的范圍。大象只對本例中用到的部分進(jìn)行講解。
        使用這種寫法,是方便我們進(jìn)行類型轉(zhuǎn)換與類型檢查。另外還可以簡化某些方法的寫法。比如:createCriteria(Criterion... criterions)這個方法。參數(shù)是Criterion類型的可變參數(shù),它是用來設(shè)置查詢條件。如果要進(jìn)行對象化查詢,那么最簡單的寫法就可以直接寫成createCriteria()。另外還有重載的方法,可以根據(jù)傳入class類型來創(chuàng)建自定義查詢。
        dao
        持久層的Dao類是根據(jù)實(shí)體類定義,一般是一個實(shí)體類就會有一個對應(yīng)的Dao類。當(dāng)然這要跟業(yè)務(wù)需求來設(shè)計(jì),不是絕對的。另外你也可以為了簡便而去掉dao層,將持久化操作與業(yè)務(wù)邏輯全部寫在service層。

        
        這些定義的方法是供service層調(diào)用,在業(yè)務(wù)層,將不會看到一行與持久層有關(guān)的代碼,降低藕合性是這樣做的目的。@Repository注解的作用就是標(biāo)注這個UserDao是一個持久層組件。還記得前一章講到的掃描器嗎?component-scan 它就是用來將標(biāo)有@Repository,@Service這樣的注解類掃描到Spring的容器里,并且同時對標(biāo)有@Autowired注解的Bean啟用了自動注入功能。這就是Spring2.5開始提供的新特性。我們使用注解的方法,就可以告別那繁瑣的配置文件定義。
        entity
        關(guān)于實(shí)體的定義就是使用JPA注解,關(guān)于這部分,我以前寫過一篇文章專門講這個,如果有不清楚的朋友可以先參考一下。學(xué)習(xí)JPA——Hibernate Annotation使用實(shí)例
        本例中,我有兩點(diǎn)要講下。
        第一、管理主鍵的表generator_table去掉原來單獨(dú)定義的那個ID主鍵,把g_key設(shè)為主鍵,整個表將只有兩個字段,g_keyg_value
        第二、在User實(shí)體中,我將角色IDrole_id)與角色實(shí)體(Role)做了一個多對一關(guān)聯(lián)。這一點(diǎn)是原來文章中沒有講過的。

        
        請一定注意role_iduser表的字段。我在本例中設(shè)定的是一個角色可以對應(yīng)多個人員,所以這個role_id存的就是roleid的值。fetch = FetchType.LAZY指定采用延遲檢索,如果當(dāng)你取得了User對象,但又不想取Role中的信息,這時,User對象中的role屬性是代理狀態(tài)。Role對象中的值都是空的。只有當(dāng)你使用role.idrole.name進(jìn)行取值的時候,hibernate才會去數(shù)據(jù)庫中查找對應(yīng)的記錄,因此在一定程度上降低了資源消耗。不過這里有點(diǎn)要注意,采用延遲檢索的時候,需要加上前一篇講到的OpenSessionInViewFilter過濾器。否則會遇到session關(guān)閉的異常。
        service
        
        @Service表示這是業(yè)務(wù)層組件。在業(yè)務(wù)層需要對UserDao加上@Autowired注解,大象在這里將業(yè)務(wù)層的方法名與持久層的方法名定義為一樣的,是我的一種習(xí)慣,大家可以按自己的想法來做。
        測試
        既然有了這么多代碼,那就來測試一下吧,看看有沒有問題。
        
        好吧,為了照顧那些堅(jiān)定的JUnit擁護(hù)者,再寫一個JUnit測試。本例使用junit-4.4.jar
        
        
        @BeforeClass注解的方法表示在類實(shí)例化之前,也就是在類的構(gòu)造方法執(zhí)行之前就會執(zhí)行。而且使用這個注解的方法必須是static void
        @Test標(biāo)明這是測試方法,方法名不用像以前那樣必須按照規(guī)則進(jìn)行命名,可以自由定義。
        上圖顯示大象使用JUnit方式測試也通過了(如果不會通過我寫它干嘛?嘿嘿)。
        假如我將張三改成張四,再來看看測試結(jié)果
    。

        
        這個截圖可以很明顯的說明所有東西。
        這一篇是給大家講怎么用代碼來實(shí)現(xiàn)除web層之外的全注解步驟。當(dāng)然,我主要是講思路,其實(shí)思路比代碼重要得多。這一個系列的最后,我會放上所有源碼供大家下載。現(xiàn)在這樣慢慢分析,是想給大家講道理。我們應(yīng)該努力提升自己的境界與層次,而不要只把眼光放在代碼上面。下一章將會著重介紹web層,以及struts2的注解插件struts2-convention。那么,我們下次繼續(xù)。
        
    本文為菠蘿大象原創(chuàng),如要轉(zhuǎn)載請注明出處。http://www.tkk7.com/bolo
    posted on 2010-04-21 22:34 菠蘿大象 閱讀(14359) 評論(47)  編輯  收藏 所屬分類: Struts2

    評論:
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三) 2010-04-22 09:22 | cocoa
    源碼啊~謝謝,哈哈~
    cocoaysj@163.com  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三) 2010-04-22 09:57 | 菠蘿大象
    @cocoa
    源碼會有的,現(xiàn)在主要是分析,為什么都這么喜歡要源碼呢?難道源碼比思路和方法都重要嗎?我這個例子其實(shí)很簡單,根本就沒有多少技術(shù)含量,主要是給大家分析開發(fā)的思路以及各部分的原理。我前面兩章分析的那么多,難道還不清楚我的想法?要是貼代碼,還不簡單,也不用花我這么多精力來寫了。哎。。。。我的本意看來沒多少人能理解。  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三) 2010-04-22 14:17 | testxx
    樓主水印做的不錯哦  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三) 2010-04-22 16:24 | 菠蘿大象
    @testxx
    用加水印的工具生成的,其實(shí)我本來是不想弄這么多圖片,但是轉(zhuǎn)帖的人太沒道德了,都不注明出處。我實(shí)在是沒辦法才出此下策。請不要見怪。  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三) 2010-04-22 18:08 | Gavin.lee
    呵呵,進(jìn)度~~ 質(zhì)量~~ 大象都要抓好啊,繼續(xù)革命~  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三) 2010-04-22 20:15 | 菠蘿大象
    @Gavin.lee
    太費(fèi)精力了,而且還吃力不討好,公司的事情也很多,第四篇估計(jì)要等到五一,也有可能五一過后,這個說不準(zhǔn),我還是決定以質(zhì)量為主。  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三) 2010-04-26 13:57 | songfantasy
    大象加油啊?快點(diǎn)出啊 ?  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三) 2010-04-26 17:50 | 菠蘿大象
    @songfantasy
    不要急,我正在寫,質(zhì)量很重要,請耐心等一下。  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三)[未登錄] 2010-04-30 20:05 | 三國阿海
    @菠蘿大象
    對質(zhì)量最重要,慢點(diǎn)沒事.等清醒的時候?qū)?  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三)[未登錄] 2010-04-30 20:17 | 三國阿海
    菠蘿大象,你在方法的上面也添加一點(diǎn)注釋.

    每次我都要講頁面上下移動看.  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三)[未登錄] 2010-04-30 20:21 | 三國阿海
    @Service表示這是業(yè)務(wù)層組件

    每層的注解都不一樣嗎?都是什么東西啊.  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三) 2010-05-01 09:10 | 菠蘿大象
    @三國阿海
    這些方法上面沒加注釋一是它們都很好理解,另一個這不是最終的代碼,提供下載的源碼里面,我會加上詳細(xì)的注釋。目前這樣寫是為了行文的需要,這是截取的圖片,如果注釋太多,圖片將會非常大,打開時也比較費(fèi)時。至于你說不清楚@Service之類的注解,你可以看一下spring相關(guān)的資料。以前是用@Component來代替@Repository、@Service的,后來為了更明確的區(qū)分才像現(xiàn)在這樣寫。  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三) 2010-05-05 09:07 | 瓜瓜
    不錯,樓主繼續(xù)加油。。。我會經(jīng)常來的。。。

    你那個簽名比較那個啥。。。  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三) 2010-05-05 09:13 | 瓜瓜
    呼叫樓主。。。。。struts.xml的配置怎么沒有講??

    re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(二)的時候說是后邊講。。


    希望你講解。。嘿嘿  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三) 2010-05-05 10:25 | 菠蘿大象
    @瓜瓜
    準(zhǔn)備在第四篇的時候講,其實(shí)也什么可講的,都注解了,這個配置文件里面的東東少的可憐,我把它和web層以及convention插件放到一起來說。  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三)[未登錄] 2010-05-07 21:00 | fw
    如果簡單的用jdbcdaosupport, 原本在xml定義一個dao是
    <bean id="userDao" class="XXX">
    <property name="dateSource" ref="dataSource"/>
    </bean>
    用注解@Repository標(biāo)記dao以后,代碼里面要如何將dataSource注入這個dao呢?  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三)[未登錄] 2010-05-07 21:02 | fw
    接樓上,除了在xml里面用default-autowire=“byName”,謝謝  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三) 2010-05-07 23:20 | 菠蘿大象
    @fw
    dataSource只是一個數(shù)據(jù)源而已,對于dao來說是執(zhí)行持久化操作,只要它能夠獲得連接就行,就像你寫的,可以把<property name="dateSource" ref="dataSource"/>換成<property name="jdbcTemplate" ref="jdbcTemplate"/>。所以,我想問的就是,你是否采用orm的方式來做?如果你堅(jiān)持使用jdbc來實(shí)現(xiàn)你的程序,那這篇系列不適合你。這個框架是建立在orm的基礎(chǔ)之上,面向的都是對象。如果使用jdbc來做,情況會非常糟糕,完全破壞了設(shè)計(jì)美學(xué)。@Repository注解是由spring容器管理的,你不必去關(guān)心這些,它會自動加入到容器中,供你使用。而你只需要關(guān)注,JdbcDaoSupport,能否提供數(shù)據(jù)源連接,答案是肯定的,我剛才試了一下,不改變配置文件,重新寫了一個JdbcDao,繼承JdbcDaoSupport,里面就一個方法,用來進(jìn)行測試
    public T get(Serializable id){
    return (T) this.getJdbcTemplate().query("select * from role where id=?",
    new Object[]{id},
    new RowMapper(){
    public Object mapRow(ResultSet rs, int arg1) throws SQLException {
    Role role = new Role();
    role.setId(rs.getInt("id"));
    role.setName(rs.getString("name"));
    return role;
    }
    }
    ).get(0);
    }
    將原來RoleDao的繼承類改為JdbcDao<Role>,其它不變,測試通過。但以這種方式實(shí)現(xiàn),我只能說非常的不好,我是堅(jiān)決不會采用這種方式來做的,也不建議大家使用,如果只是學(xué)習(xí),那到可以,因?yàn)閖dbc是基礎(chǔ),這個不能丟,但是真正的實(shí)際開發(fā),是不要采取這種方式,你認(rèn)為“簡單的用jdbcdaosupport”,在我看來,卻很復(fù)雜,同樣的根據(jù)ID取對象,使用orm方式,只需要很少的代碼就能實(shí)現(xiàn),利用泛型可以達(dá)到復(fù)用的目的,而用jdbc這種方式,不光代碼很多,還無法復(fù)用,代碼全是死的,后期維護(hù)更麻煩。你慢慢體會吧。話說的不中聽,請你原諒,突然有感而發(fā)。  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三)[未登錄] 2010-05-08 23:32 | fw
    @菠蘿大象
    目前確實(shí)我還只是初學(xué)用struts2+spring, 對hibernate還沒有系統(tǒng)學(xué)習(xí)過,所以目前還只能用spring jdbc來做數(shù)據(jù)訪問,會通過學(xué)習(xí)過渡到hibernate的。非常感謝你詳細(xì)的解釋。另外注解驅(qū)動dao注冊到context這種方式貌似確實(shí)沒有別的辦法設(shè)置jdbcTemplate需要的dataSource屬性了,只有在xml配置里面添加default-autoware="true"解決了  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三)[未登錄] 2010-05-08 23:34 | fw
    筆誤 default-autoware="byName" -_-!  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三) 2010-05-09 10:09 | 菠蘿大象
    @fw
    我回復(fù)里面不是說過了嗎?不用改任何配置文件,我只是重新寫一個JdbcDao類,繼承了JdbcDaoSupport,這個類里,就一個get方法,使用JdbcDaoSupport 提供的getJdbcTemplate()。既然你繼承了JdbcDaoSupport,這個類里面它提供jdbcTemplate,而且會將dataSource設(shè)置進(jìn)來,你看下JdbcDaoSupport源代碼  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三) 2010-06-21 14:57 |
    非常厲害呀 支持 經(jīng)常關(guān)注  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三) 2010-06-21 20:08 | 菠蘿大象
    @鷹
    你太夸獎了,謝謝支持。  回復(fù)  更多評論
      
    # mybatis結(jié)合 2011-01-12 12:40 | 簡單
    樓主寫的很給力,有點(diǎn)像springside的思路。真是英雄所見略同。我想問你和mybatis除了他提供的spring結(jié)合方式你有什么好的方式么  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三) 2011-01-12 23:50 | 菠蘿大象
    @簡單
    我參考過springside,springside做的確實(shí)很好,不過我對其作了更進(jìn)一步的封裝與處理,原版的基類有點(diǎn)過于簡單了。不過這個例子我沒有寫的很復(fù)雜,只是一個入門學(xué)習(xí)資料。  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三) 2011-01-13 14:34 | 簡單
    能否加qq交流下。271890026  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三) 2011-02-17 13:36 | sdfsdf
    大象,你的qq多少,我加你,最近在學(xué)習(xí)spring mvc annotation遇到問題了  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三)[未登錄] 2011-04-19 02:30 | wanglong0109
    感覺大象一開始不放出源碼的做法是對的,而且很有效。當(dāng)我看第一篇的時候我就想找源碼直接放到MyEclipse里面運(yùn)行,結(jié)果沒找到,所以只有自己一邊看一邊寫了,雖然有點(diǎn)麻煩,但是這確實(shí)能讓我靜下心來認(rèn)真看,學(xué)到了不少東西。謝謝大象!  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三) 2011-05-18 17:00 | 李亮
    運(yùn)行起來 報(bào)錯啊 沒用過這種注解方式不怎么懂 請問如果運(yùn)行你源碼的話 配置文件里需要改動嗎
    報(bào)錯“No bean named 'userManager' is defined”  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三) 2011-05-18 17:08 | 菠蘿大象
    @李亮
    數(shù)據(jù)庫連接的用戶名與密碼是要根據(jù)你自己的來設(shè)置,其它的配置不需要改動,我的這個例子是自己做出來的,并經(jīng)過測試的,你是直接運(yùn)行我的例子嗎?如果你是重新構(gòu)建的工程請檢查代碼與配置,另外,確保jar包的完整與版本的一致,因?yàn)橛泻芏嗳擞龅竭^你這樣的問題,有的是自己構(gòu)建工程,用我的示例代碼,有的是jar包不對造成程序運(yùn)行不起來,如果你對這個ssh2以及注解還不熟的話,請先把我的例子運(yùn)行起來后,逐漸了解了再自己試著做  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三) 2011-05-19 16:55 | 李亮
    @菠蘿大象
    我一直就是想運(yùn)行起來再去進(jìn)一步熟悉 再看整個流程 可總是遇到這樣那樣的問題。。。汗啊  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三) 2011-05-19 16:57 | 菠蘿大象
    @李亮
    童鞋加油,很多人都一開始沒有成功,最后都成功了,從而可以提高調(diào)試能力。  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三) 2011-05-19 17:41 | 李亮
    我在努力 下班了 回家搞。。。  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三) 2011-07-06 17:54 | 乾坤
    看你這個注解系列好幾遍了, 現(xiàn)在終于能看懂了,很好很強(qiáng)大,謝謝  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三) 2011-10-18 15:54 | sherry
    在仿照樓主的例子做測試時,使用的是struts2.1.6+spring3.1.0+hibernate4悲催的是找不到org.hibernate.cache.CacheProvider類,hibernate4中不存在該類...哭ING...  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三) 2011-10-20 09:40 | 菠蘿大象
    @sherry
    hibernate每次大升級,都會有很大的變化,出現(xiàn)這種情況不奇怪,hibernate4我還沒用過,寫這篇系列的時候是在2010年,用的都是穩(wěn)定發(fā)布版  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三) 2012-02-29 10:58 | Klingon
    spring中已經(jīng)配置自動掃描:
    <context:component-scan base-package="cn.test"></context:component-scan>
    Action類:
    public class ShowAccountAction extends ActionSupport {
    private static final long serialVersionUID = 1L;
    @Autowired
    private transient AccountService accountService;
    頁面請求:
    <s:url action="show-account" var="showAccountUrl">
    <s:param name="username" value="%{'j2ee'}"/>
    </s:url>
    問題:
    1.如上代碼accountService為空, 也就是說Spring無法注入
    2.如果在Action類上加@Controller("show-account")然后
    cxt = new ClassPathXmlApplicationContext("applicationContext.xml");
    ShowAccountAction showAccount= (ShowAccountAction)cxt.getBean("show-account");
    accountService = showAccount.getAccountService();得到非空accountServic,此時也就是說Spring可以注入
    3綜合1、2說明Action沒有被Spring托管
    我看過您的Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解,也十分想嘗試下注解,請您幫助解決下。  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三) 2012-04-26 17:22 | sjm
    多對一關(guān)聯(lián)后怎么存User?  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三) 2012-04-27 08:38 | 菠蘿大象
    @sjm
    你是說User與Role關(guān)聯(lián)后,User對象的保存?它里面有什么屬性就存什么。你最好將源代碼down下來看看,源碼在第五篇最下面。  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三) 2012-04-27 11:02 | sjm
    @菠蘿大象
    好了,在存User的時候根據(jù)id再取一次Role就行了。
    大象的博客很強(qiáng)大,學(xué)到不少東西。  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三)[未登錄] 2012-06-06 17:09 | 王曉軍
    我理解你。最重要的是思想。有了思想源碼便是浮云。@菠蘿大象
      回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三) 2013-01-23 19:25 | zjg
    我想請問一下您啊,這里為什么使用getSession而不是用Spring封裝好的getHibernateTemplate啊?兩者在什么場合使用呢?  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三) 2013-01-24 08:36 | 菠蘿大象
    @zjg
    這個看你的喜好了,getHibernateTemplate是被spring封裝過的,你當(dāng)然可以選擇它來用,而getSession是原生的,并且我喜好用Criteria方式來編寫代碼,這樣感覺代碼更簡潔些。你可以自己去改的,第五篇最下面提供源碼下載。  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三) 2013-02-18 11:21 | 秦時明月
    前輩,首先萬分感謝你!這文章我是相見恨晚啊?。?!
    我運(yùn)行代碼時,報(bào)錯了:Caused by: java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required
    請前輩為我解惑,多謝!  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三)[未登錄] 2014-04-17 10:29 | ccc
    @菠蘿大象
    不要傷心,我覺得您寫的很入門,很直觀,解釋得也很好!謝謝。同時我認(rèn)為你說的很對,開發(fā)的思路以及各部分的原理很重要!理解好,動手起來就不難了!  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三) 2014-06-26 17:40 | 休息食客
    @菠蘿大象
    非常理解,在搭建一個系統(tǒng)架構(gòu)的時候,思路是最重要的,在設(shè)計(jì)的時候要考慮到代碼的復(fù)用性,后期維護(hù)性,健壯性以及敏捷性開發(fā)。寫得非常不錯,挺你!  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三)[未登錄] 2014-07-21 15:56 | lxl
    非常感謝~受益匪淺~  回復(fù)  更多評論
      
    主站蜘蛛池模板: 亚洲一区二区三区播放在线| 国产精品亚洲аv无码播放| 免费一级肉体全黄毛片| 亚洲av区一区二区三| 亚洲色自偷自拍另类小说| 亚洲AV日韩精品久久久久久久| 中文字幕在线观看亚洲| 亚洲粉嫩美白在线| 深夜福利在线视频免费| 亚洲国产中文v高清在线观看| 久久久久国产亚洲AV麻豆| 久久亚洲国产视频| 亚洲人成网站在线在线观看| 一本大道一卡二大卡三卡免费| 国产白丝无码免费视频| 成人免费视频小说| 亚洲中文字幕丝袜制服一区| 777亚洲精品乱码久久久久久 | 久久精品国产亚洲香蕉| 亚洲人成77777在线播放网站不卡| 美女被免费网站在线视频免费 | 妇女自拍偷自拍亚洲精品| 国产一二三四区乱码免费| 精品国产无限资源免费观看| 白白国产永久免费视频| 亚洲gv白嫩小受在线观看| 亚洲va成无码人在线观看| 一个人免费观看日本www视频| 1区2区3区产品乱码免费| 国产精品二区三区免费播放心| 亚洲AV无码国产丝袜在线观看| 亚洲综合一区二区三区四区五区| 一本一道dvd在线观看免费视频| 在线观看免费视频资源| 亚洲国产成人精品无码久久久久久综合 | 2020年亚洲天天爽天天噜| 亚洲第一页中文字幕| 黄色免费网站在线看| 免费观看黄色的网站| 国产亚洲美女精品久久久2020| 亚洲综合av一区二区三区 |