一說起傳說中的SSH(Struts+Spring+Hibernate)架構(gòu),許多人的心里面就沒有底。
依照本人來看,所謂的整合沒有什么神秘的,只不過就是讓三個(gè)框架在一起協(xié)同的工作,我們做的主要工作就是讓其知道彼此的存在,打成“統(tǒng)一戰(zhàn)線聯(lián)盟”以后,再各自為戰(zhàn),互不干擾。
下面就本人知道的一些整合方法一一敘述。
1 Struts+Spring
主要就是讓Struts知道Spring的存在,我們可以采用兩種辦法。
(1) 運(yùn)用Struts的插件方法,添加struts-congif.xml的<plug-in>節(jié)點(diǎn)。
示例代碼如下:
- <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
- <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml" />
- </plug-in>
上段代碼意圖很簡單:把Struts的配置文件和Spring的配置文件聯(lián)系起來,這樣Struts就知道了Spring的存在。
另外,在web.xml里面需要配置一個(gè)Spring的監(jiān)聽器,示例代碼如下:
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
- </listener>
第一種方法完畢。
(2) 直接在web.xml里面進(jìn)行加載。
這種方法與上種方法的不同之處在于Spring的配置文件加載的位置不同,上種方法是在struts-cong.xml中聲明,而這種方法是在web.xml里面進(jìn)行聲明,示例代碼如下:
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>
- /WEB-INF/applicationContext-module1.xml,
- /WEB-INF/applicationContext-module2.xml
- </param-value>
- </context-param>
這樣我們就實(shí)現(xiàn)了第二種方法的SS整合。
問題至于我們還要遇到一個(gè)小問題,那就是Struts如何實(shí)用Spring的特性?Struts怎么就知道Spring注入的Bean呢?當(dāng)然,這需要我們進(jìn)行編程式的聲明,眾所周知,在Strus的Action里面有一個(gè)setServlet方法,我們此時(shí)就需要覆蓋這個(gè)方法,當(dāng)ActionServlet把請求轉(zhuǎn)發(fā)到此Action時(shí),Action就可以實(shí)用Spring的特性。
示例代碼如下:
- import org.springframework.context.ApplicationContext;
- import org.springframework.web.context.support.WebApplicationContextUtils;
- public void setServlet(ActionServlet actionServlet) {
- try {
- super.setServlet(actionServlet);
- ServletContext servletContext = actionServlet.getServletContext();
- context = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
- } catch(Exception e) {
- e.printStackTrace();
- }
- }
其中context是ApplicationContext的實(shí)例,有了上串代碼以后我們就可以以下面的方式進(jìn)行Spring的特性利用了!
- protected IXjdjService getXjdjServiceImp(){
- return (IXjdjService) context.getBean("xjdj");
- }
到此OK,Struts與Spring的整合成功。
2 Spring+Hibernate
可以說Spring與Hibernate的整合是非常完善的,具體要素如下:
在Hibernate中,最重要的無非就是兩點(diǎn),一是配置數(shù)據(jù)庫連接池,二是配置實(shí)體類的映射文件。現(xiàn)在我貼出上述兩點(diǎn)在Spring里面是怎么配的,配置完畢以后,我們完全可以刪除hibernate.cfg.xml文件。示例代碼如下:
- <bean id="dataSource"
- class="org.springframework.jdbc.datasource.DriverManagerDataSource">
- <property name="driverClassName">
- <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
- </property>
- <property name="url">
- <value>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=EXAM</value>
- </property>
- <property name="username">
- <value>sa</value>
- </property>
- <property name="password">
- <value>135780</value>
- </property>
- </bean>
- <!-- 配置Hibernate會(huì)話工廠 -->
- <bean id="sessionFactory"
- class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
- <property name="dataSource">
- <ref bean="dataSource" />
- </property>
- <!-- 在此可以配置Hibernate會(huì)話工廠的屬性 -->
- <property name="hibernateProperties">
- <props>
- <prop key="hibernate.dialect">
- org.hibernate.dialect.SQLServerDialect
- </prop>
- <prop key="hibernate.show_sql">true</prop>
- </props>
- </property>
- <!-- 在此可以匹配*.hbm.xml映射文件 -->
- <property name="mappingDirectoryLocations">
- <list>
- <value>
- classpath:/com/wjh/comm/framework/bean
- </value>
- </list>
- </property>
- <property name="mappingResources">
- <list>
- <value>com/wjh/example/User.hbm.xml</value>
- </list>
- </property>
- </bean>
OK,到此就完成了Spring+Hibernate的整合,縱觀整個(gè)過程,我們可以發(fā)現(xiàn)一點(diǎn),那就是所謂的整合就是他們配置文件的融合,只要抓住這一點(diǎn),再復(fù)雜的程序也會(huì)變的簡單。
網(wǎng)友經(jīng)常說,我也是這么做的,但是總是不成功。說實(shí)在的這個(gè)東西理論很簡單,但是實(shí)際操作起來確實(shí)要費(fèi)一番周折,大家在整合過程中出現(xiàn)了什么問題,不妨貼出來,我們一起討論討論!
http://hi.baidu.com/ziheng65/blog/item/0546d01609bedb4f21a4e904.html