隨筆-42  評(píng)論-578  文章-1  trackbacks-0

                  基于Annotation的SSH整合開(kāi)發(fā),其實(shí),并沒(méi)有我當(dāng)初想像中那么順利。真正去做的時(shí)候,才發(fā)覺(jué)有許多問(wèn)題。但不要緊,探索一下吧。在探索過(guò)程中學(xué)到知識(shí),才是最重要的。
                  言歸正傳,現(xiàn)在,我們加入Spring的支持:把spring-framework-2.5.5\dist中的spirng.jar引進(jìn)我們項(xiàng)目的lib目錄來(lái),還要添加\lib\aspectj\下的兩個(gè)jar包,以支持切面編程。
                  必要的配置文件還是要的:
                  applicationContext-common.xml

          <?xml version="1.0" encoding="UTF-8"?>
          <beans xmlns="http://www.springframework.org/schema/beans"
              xmlns:xsi
          ="http://www.w3.org/2001/XMLSchema-instance" 
              xmlns:context
          ="http://www.springframework.org/schema/context"
              xmlns:aop
          ="http://www.springframework.org/schema/aop"
              xmlns:tx
          ="http://www.springframework.org/schema/tx"
              xsi:schemaLocation
          ="
                      http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
                      http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
                      http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
                      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"
          >
                      
              
          <!-- 配置SessionFactory,由Spring容器來(lái)管理Hibernate -->
              
          <!-- 非Annotation時(shí),使用org.springframework.orm.hibernate3.LocalSessionFactoryBean,
                  它注入實(shí)體類(lèi)的方式是setMappingResources(),而Hibernate Annotation所用的映射方式
                  不是mapping resource,而是mapping class,這就要用到LocalSessionFactoryBean的子類(lèi)
                  AnnotationSessionFactoryBean了.因?yàn)锳nnotationSessionFactoryBean它支持實(shí)體的注入
                  方式setAnnotatedClasses,即對(duì)應(yīng)Hibernate中的mapping class.參見(jiàn)這兩個(gè)類(lèi)的源代碼. 
          -->
              
          <bean id="sessionFactory"
                  class
          ="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
                  
          <property name="configLocation">
                      
          <value>classpath:hibernate.cfg.xml</value>
                  
          </property>
              
          </bean>

              
          <!-- 配置事務(wù)管理器 -->
              
          <bean id="transactionManager"
                  class
          ="org.springframework.orm.hibernate3.HibernateTransactionManager">
                  
          <property name="sessionFactory">
                      
          <ref bean="sessionFactory" />
                  
          </property>
              
          </bean>
              
              
          <!-- 配置事務(wù)的傳播特性 -->
              
          <tx:advice id="txAdvice" transaction-manager="transactionManager">
                  
          <tx:attributes>
                      
          <tx:method name="save*" propagation="REQUIRED" />
                      
          <tx:method name="update*" propagation="REQUIRED" />
                      
          <tx:method name="delete*" propagation="REQUIRED" />
                      
          <tx:method name="*" read-only="true" />
                  
          </tx:attributes>
              
          </tx:advice>
              
              
              
          <!-- 那些類(lèi)的哪些方法參與事務(wù) -->
              
          <aop:config>
                  
          <aop:pointcut id="allServiceMethod" expression="execution(* com.rong.dao.*.*.*(..))" />
                  
          <aop:advisor pointcut-ref="allServiceMethod" advice-ref="txAdvice" />
              
          </aop:config>
              
              
          <!-- 使Spring關(guān)注Annotation -->
              
          <context:annotation-config/>
              
              
          <!-- 讓Spring通過(guò)自動(dòng)掃描來(lái)查詢(xún)和管理Bean -->
              
          <context:component-scan base-package="com.rong"/>
              
              
          <!-- 
              <bean id="userDao" class="com.rong.dao.UserDaoBean">
                  <property name="sessionFactory" ref="sessionFactory"/>
              </bean>
              <bean id="userService" class="com.rong.service.UserServiceBean">
                  <property name="userDao" ref="userDao"/>
              </bean>
               
          -->
              
          </beans>

                  關(guān)鍵的兩點(diǎn):

              <!-- 使Spring關(guān)注Annotation -->
              
          <context:annotation-config/>
              
              
          <!-- 讓Spring通過(guò)自動(dòng)掃描來(lái)查詢(xún)和管理Bean -->
              
          <context:component-scan base-package="com.rong"/>

                  這樣配置之后,就省去了上面注釋掉的DAO層和Service層等配置代碼。是不是很方便呢。
                 關(guān)于這一部分的XML代碼,我們下面還會(huì)作解釋。

                  來(lái)開(kāi)發(fā)我們的DAO層吧,接口如下:

          package com.rong.dao;

          import java.util.List;
          import com.rong.entity.User;

          public interface UserDao {
              
              
          public void save(User user);
              
              
          public void delete(int id);
              
              
          public void update(User user);
              
              
          public List<User> query();
              
              
          public User get(int id);

          }

                  DAO層的實(shí)現(xiàn)類(lèi):
          package com.rong.dao;

          import java.util.List;
          import org.springframework.stereotype.Repository;
          import com.rong.entity.User;

          @Repository(
          "userDao")        //聲明此類(lèi)為數(shù)據(jù)持久層的類(lèi)
          public class UserDaoBean extends MyHibernateDaoSupport implements UserDao {
              
              
          public void save(User user){
                  
          super.getHibernateTemplate().save(user);
              }

              
              
          public void delete(int id){
                  
          super.getHibernateTemplate().delete(super.getHibernateTemplate().load(User.class, id));
              }

              
              
          public void update(User user){
                  
          super.getHibernateTemplate().update(user);
              }

              
              @SuppressWarnings(
          "unchecked")
              
          public List<User> query(){
                  
          return super.getHibernateTemplate().find("from User");
              }

              
              
          public User get(int id){
                  
          return (User)super.getHibernateTemplate().get("from User", id);
              }


          }

                  大家可以看到,我們這里繼承的不是HibernateDaoSupport,而是我自己編寫(xiě)的一個(gè)類(lèi)MyHibernateDaoSupport。其代碼如下:
          package com.rong.dao;

          import javax.annotation.Resource;
          import org.hibernate.SessionFactory;
          import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

          public class MyHibernateDaoSupport extends HibernateDaoSupport {
              
              @Resource(name
          ="sessionFactory")    //為父類(lèi)HibernateDaoSupport注入sessionFactory的值
              public void setSuperSessionFactory(SessionFactory sessionFactory){
                  
          super.setSessionFactory(sessionFactory);
              }


          }
                  我們之所以要改寫(xiě)HibernateDaoSupport,是因我為,我們要為DAO層的類(lèi)注入SessionFactory這個(gè)屬性。以后,我們開(kāi)發(fā)的DAO類(lèi),就可以直接重用這個(gè)MyHibernateDaoSupport了。其實(shí),這樣做是相當(dāng)于配置文件方式的代碼:        
              <bean id="userDao" class="com.rong.dao.UserDaoBean">
                  
          <property name="sessionFactory" ref="sessionFactory"/>
              
          </bean>
                  我們既然要用annotation代替XML文件的,就要讓它也能像原來(lái)那樣使用sessionFactory,故為MyHibernateDaoSupport注入SessionFactory。子類(lèi)繼承這個(gè)類(lèi)時(shí),也繼承其Annotation。這樣,我們就可以實(shí)現(xiàn)SessionFactory的注入了。
                   到現(xiàn)在,我們?cè)倩剡^(guò)頭來(lái)看applicationContext-common.xml中的
              <bean id="sessionFactory"
                  class
          ="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
                  
          <property name="configLocation">
                      
          <value>classpath:hibernate.cfg.xml</value>
                  
          </property>
              
          </bean>
                  我們平時(shí)開(kāi)發(fā)Hibernate與Spring整合時(shí),常常會(huì)用到org.springframework.orm.hibernate3.LocalSessionFactoryBean來(lái)提供SessionFactory,而我們這里卻要改成org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean。其實(shí)是這樣的,我們?cè)贖ibernate.cfg.xml中配置的實(shí)體類(lèi)映射的方式如下:(詳見(jiàn)基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開(kāi)發(fā) (1)
                  <!--
                  <mapping resource="com/rong/entity/User.hbm.xml"/>
                   
          -->
                   
                   
          <!-- 在Hibernate中注冊(cè)User實(shí)體類(lèi),區(qū)別于上面注釋掉的resource寫(xiě)法 -->
                   
          <mapping class="com.rong.entity.User"/>
                  要使Hibernate的實(shí)體類(lèi)支持注解,去掉xxx.hbm.xml的文件,故我們所用的是mapping class方式,不是mapping resource的方法。然而,LocalSessionFactoryBean這個(gè)類(lèi),它采用的實(shí)體類(lèi)映射方式是mapping resource,(詳情可參見(jiàn)LocalSessionFactoryBean這個(gè)類(lèi)的源代碼)。如果我們?cè)谂渲弥腥匀挥眠@個(gè)類(lèi)的話(huà),Hibernate與Spring整合時(shí),就會(huì)報(bào)錯(cuò)。而AnnotationSessionFactoryBean這個(gè)類(lèi)在LocalSessionFactoryBean的基礎(chǔ)上添加了mapping class方式實(shí)現(xiàn)實(shí)體類(lèi)映射(詳見(jiàn)AnnotationSessionFactoryBean類(lèi)的源代碼)。
                  我們?cè)賮?lái)看Service層的代碼:(接口比較簡(jiǎn)單,節(jié)約篇幅就不列出了)
          package com.rong.service;

          import java.util.List;
          import javax.annotation.Resource;
          import org.springframework.beans.factory.annotation.Autowired;
          import org.springframework.stereotype.Service;
          import com.rong.dao.UserDao;
          import com.rong.entity.User;

          @Service(
          "userService")        //聲明此類(lèi)為業(yè)務(wù)邏輯層的類(lèi)
          public class UserServiceBean implements UserService {
              
              @Autowired
              
          private UserDao userDao;

              
          public void save(User user){
                  userDao.save(user);
              }


          }
                  我們用到的注解上面一般都作了注釋?zhuān)筒欢鄶ⅰ?#64;Autowired和@Resource功能差不多,就是把對(duì)象注入,相當(dāng)于<bean>配置的功能。
                  好,就開(kāi)發(fā)到這樣,是不是忘記了什么?記得要配置web.xml,部分代碼如下:
                <!-- 修改Spring配置文件的路徑 -->
              
          <context-param>
                  
          <param-name>contextConfigLocation</param-name>
                  
          <param-value>classpath*:applicationContext-*.xml</param-value>
              
          </context-param>
              
              
          <!-- 配置Spring -->
              
          <listener>
                  
          <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
              
          </listener>

                  是不是真的成功了?用Junit測(cè)試一下吧,我測(cè)試過(guò)是沒(méi)問(wèn)題的,由于篇幅,Junit的測(cè)試代碼就不貼出來(lái)了。自己練習(xí)一下吧!
                  其實(shí),到現(xiàn)在為止,我們發(fā)覺(jué)我們的XML配置文件還是很多。其實(shí),這樣想想,上一階段我們省去了xxx.hbm.xml這類(lèi)的文件,這一階段,我們少去了<bean id="" class=""><property name="" ref="">這樣的配置項(xiàng)。而這些,正是我們項(xiàng)目開(kāi)發(fā)中,大量使用的配置。而只要書(shū)寫(xiě)簡(jiǎn)單的Annotation注解,就可以省去這樣,我們何樂(lè)而不用。而那些我們保留的XML配置文件(如:數(shù)據(jù)庫(kù)連接,事務(wù)),這樣是寫(xiě)死的,一個(gè)項(xiàng)目就寫(xiě)一次或復(fù)制過(guò)來(lái)用,我們保留它又何妨?

                  好,暫時(shí)到這里,我們還有下一階段的基于Annotation的SSH整合開(kāi)發(fā),我們將會(huì)以一個(gè)用戶(hù)注冊(cè)的例子,把Struts2的注解帶到我們的整合開(kāi)發(fā)中來(lái)。一起期待吧!
                  (*^-^*) 本文原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處, http://www.aygfsteel.com/rongxh7謝謝! (*^-^*)

          本文原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處,謝謝!http://www.aygfsteel.com/rongxh7(心夢(mèng)帆影JavaEE技術(shù)博客)
              

          posted on 2009-03-25 01:05 心夢(mèng)帆影 閱讀(13177) 評(píng)論(24)  編輯  收藏 所屬分類(lèi): Struts2.xHibernateSpring

          評(píng)論:
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開(kāi)發(fā) (2) 2009-03-25 09:17 | awed
          對(duì)于在Hibernate上什么Annotation還比較好理解,但對(duì)于Spring的Service上使用就有點(diǎn)不理解了,對(duì)于多人協(xié)作開(kāi)發(fā)的時(shí)候如何知道定義的DAO名呢,就像
          @Autowired
          private UserDao userDao;
          如果我在DAO層上定義的@Repository("userDao")不是 userDao的名字,那么是否是按類(lèi)型來(lái)匹配  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開(kāi)發(fā) (2) 2009-03-25 14:37 | super2
          <mapping class="com.rong.entity.User"/> 這個(gè)也應(yīng)該零配置  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開(kāi)發(fā) (2) [未登錄](méi) 2009-03-26 17:41 | wolf
          嚴(yán)重支持中,加油~~你真的很不錯(cuò)~~  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開(kāi)發(fā) (2) 2009-04-30 16:59 | baidu:aids514
          仔細(xì)讀了下你的文章,的確寫(xiě)的不錯(cuò),看得出來(lái)你花了很多時(shí)間在這上面

          呵呵,感謝和我們分享,謝謝。。

          不過(guò),讀完,試完之后發(fā)現(xiàn)一些不足之處,呵呵,個(gè)人覺(jué)得,也不知道對(duì)不對(duì)

          在測(cè)試的時(shí)候,發(fā)現(xiàn)程序運(yùn)行好慢,遠(yuǎn)遠(yuǎn)沒(méi)有spring2.0+hibernate3.2組合的

          無(wú)注釋運(yùn)行的快,在web中還沒(méi)來(lái)及測(cè)試,不知道效果怎么樣。

          樓主能否做個(gè)測(cè)試呢?評(píng)價(jià)下有\(zhòng)無(wú)注釋的優(yōu)與劣?

          靜候佳音....

          有結(jié)果可以發(fā)到我郵箱,我們也可以交流下:dukai1008@163.com  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開(kāi)發(fā) (2) 2009-04-30 17:11 | baidu:aids514
          初步做了個(gè)測(cè)試

          但是發(fā)不上來(lái),說(shuō)我的是廣告,暈死了

          從[Test] INFO [2009-04-30 17:07:36,984] 到 [Test] INFO [2009-04-30 17:07:43,796]

          差不多用7秒之久,估計(jì)放到web中會(huì)快3到4秒

          明天測(cè)試下,今天下班了,呵呵  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開(kāi)發(fā) (2) [未登錄](méi) 2009-05-31 21:42 | hone
          ContextLoader - Context initialization failed
          org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userDao' defined in file [E:\setupsoft\Tomcat5.5\webapps\ssh2\WEB-INF\classes\com\rong\dao\impl\UserDaoBean.class]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開(kāi)發(fā) (2) 2009-05-31 23:54 | 心夢(mèng)帆影
          @hone
          你有沒(méi)有寫(xiě)MyHibernateDaoSupport類(lèi)?  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開(kāi)發(fā) (2) [未登錄](méi) 2009-06-02 14:06 | hone
          有寫(xiě)MyHibernateDaoSupport這個(gè)類(lèi)  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開(kāi)發(fā) (2) [未登錄](méi) 2009-06-02 14:13 | hone
          博主,我的郵箱是hone033@gmail.com,期待你的回復(fù)  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開(kāi)發(fā) (2) 2009-06-08 09:54 | ufo
          www.gm365.com上發(fā)布的web server軟件UFO不會(huì)出現(xiàn)一個(gè)字節(jié)的內(nèi)存泄漏和一個(gè)線(xiàn)程的不能回收,使用UFO做Web Server的好處是網(wǎng)站能做得很穩(wěn)定,永遠(yuǎn)也不會(huì)自己down掉;UFO在托管機(jī)房丟包率很高、遭受Hacker攻擊、互聯(lián)網(wǎng) 骨干網(wǎng)被黑等惡劣的環(huán)境條件下仍然能很好地運(yùn)行;UFO在對(duì)付Hacker方面(防Hacker弄down和Hacker抓取不該訪(fǎng)問(wèn)的資源)也有足 夠措施。
          另外,UFO幾乎不會(huì)進(jìn)行垃圾回收,消耗CPU很少,在普通的PC Server上用UFO運(yùn)行網(wǎng)站,平時(shí)CPU占用率<0.1%,最多時(shí)也不會(huì)超 過(guò)5%。您知道,JVM的垃圾回收會(huì)導(dǎo)致大量的運(yùn)算,消耗很多CPU,從而導(dǎo)致Server的負(fù)載能力和響應(yīng)速度下降。UFO在對(duì)象管理方面采 用了很好的機(jī)制和算法,做得很出色。用UFO運(yùn)行網(wǎng)站,可以一直保證高負(fù)載能力,快速的響應(yīng)速度和低CPU消耗。
            回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開(kāi)發(fā) (2) 2009-06-13 20:09 | 吳丹勇
          寫(xiě)的很好啊!受益良多!  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開(kāi)發(fā) (2) 2009-07-28 22:53 | ynyee
          @awed
          他會(huì)根據(jù)你寫(xiě)的變量名獲取到類(lèi)型  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開(kāi)發(fā) (2) [未登錄](méi) 2009-12-03 17:56 | a
          在spring的配置文件中sessionFactory 為 AnnotationSessionFactoryBean,而在@Resource(name="sessionFactory")中使用的是org.hibernate.SessionFactory
          是否有問(wèn)題?這兩個(gè)sessionFactory是什么關(guān)系?請(qǐng)指教
            回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開(kāi)發(fā) (2) 2009-12-04 23:11 | 心夢(mèng)帆影
          @a
          因?yàn)樵诒疚闹校瑸榱耸褂胓etHibernateTemplate()方法,我們不得不繼承HibernateDaoSupport類(lèi),而在HibernateDaoSupport類(lèi)中,有一個(gè)方法:
          public final void setSessionFactory(SessionFactory sessionFactory) {
          if (this.hibernateTemplate == null || sessionFactory != this.hibernateTemplate.getSessionFactory()) {
          this.hibernateTemplate = createHibernateTemplate(sessionFactory);
          }
          }
          這是我們注入SessionFactory的入口方法,而既然我們采用了Annotation取代XML配置了,就需要HibernateDaoSupport類(lèi)的setSessionFactory方法是加多一個(gè)注解:@Resource(value="sessionFactory")。
          然而,我們不能直接修改Hibernate的源碼,就只能繼承它,正如上文中我寫(xiě)的MyHibernateDaoSupport類(lèi),再在MyHibernateDaoSupport類(lèi)中通過(guò)super關(guān)鍵詞為父類(lèi)注入AnnotationSessionFactory.  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開(kāi)發(fā) (2) 2010-02-08 15:04 | 人字
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開(kāi)發(fā) (2) 2010-02-08 15:07 | 人字
          你好~!我現(xiàn)在也在整合ssh,不過(guò)遇到很到問(wèn)題~!看了你的杰作真是佩服~!但是我還是菜鳥(niǎo),你沒(méi)寫(xiě)的東西我都寫(xiě)不出來(lái)~!所以能不能麻煩你把整個(gè)項(xiàng)目的源碼,還有Spring+hibernate整合的測(cè)試代碼發(fā)給我啊?~!謝謝。。。  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開(kāi)發(fā) (2) 2010-02-08 15:08 | 人字
          不好意思!忘了寫(xiě)我的郵箱地址:346527107@qq.com ...無(wú)限感激  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開(kāi)發(fā) (2) 2010-03-10 22:20 | 雙目魚(yú)
          小弟佩服!!  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開(kāi)發(fā) (2) 2010-05-22 21:48 | 游客
          public final void setSessionFactory(SessionFactory sessionFactory) {
          if (this.hibernateTemplate == null || sessionFactory != this.hibernateTemplate.getSessionFactory()) {
          this.hibernateTemplate = createHibernateTemplate(sessionFactory);
          }
          }


          MyHibernateDaoSupport 居然能夠 override setSessionFactory,神來(lái)之筆啊  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開(kāi)發(fā) (2) 2010-07-13 23:53 |
          <mapping class="com.rong.entity.User"/>


          要是有上100個(gè) 實(shí)體,都得一個(gè)一個(gè)配么?  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開(kāi)發(fā) (2) 2011-04-27 11:55 | daniu
          @特
          那就在實(shí)體類(lèi)上也使用注解, 別用hbm.xml了
          <bean id="sessionFactory"
          class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
          <!-- 依賴(lài)注入數(shù)據(jù)源,注入正是上面定義的dataSource -->
          <property name="dataSource" ref="dataSource" />
          <property name="packagesToScan">
          <list>
          <value>com.test.model</value>
          </list>
          </property>
          </bean>

          實(shí)體類(lèi)直接注解即可
            回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開(kāi)發(fā) (2) 2011-07-19 14:38 | 魚(yú)歸不知處
          你好!我現(xiàn)在正在整合SSH,看了你的文章,覺(jué)得非常不錯(cuò),可自己現(xiàn)在還是個(gè)菜鳥(niǎo),麻煩你能否把整合的源碼發(fā)給我一份,萬(wàn)分感謝!!!郵箱地址:253366940@qq.com  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開(kāi)發(fā) (2) 2011-09-01 09:42 | 錢(qián)塘江
          您好,能把這個(gè)工程代碼發(fā)我郵箱么,謝謝575955073@qq.com  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開(kāi)發(fā) (2) 2013-03-15 14:36 | kkkkksyou
          @游客
          大哥 你看清楚 哪個(gè)是override 么?  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 上林县| 陈巴尔虎旗| 广州市| 敦化市| 平凉市| 萍乡市| 吴旗县| 沾益县| 通化市| 周至县| 福贡县| 乌拉特中旗| 江孜县| 双江| 宁明县| 含山县| 大洼县| 乌恰县| 辽中县| 武邑县| 绥芬河市| 杭州市| 彭阳县| 柯坪县| 汕尾市| 安康市| 庐江县| 凤冈县| 太湖县| 灵丘县| 凤凰县| 石河子市| 鲁甸县| 股票| 梅州市| 开鲁县| 邹平县| 峨眉山市| 土默特左旗| 县级市| 象山县|