SpringMVC的兩種配置方式:.xml / .class

The request processing workflow in Spring Web MVC (high level)
這里主要介紹SpringMVC的兩種配置文件的方式:
  • 1版保、使用傳統(tǒng)的.xml配置文件耍群;
  • 2、現(xiàn)在比較流行的使用代碼配置代碼的方式(用普通的Java類實(shí)現(xiàn)配置)找筝。

以下用代碼的方式表述詳細(xì)過程:

@Section one : .xml

- 1蹈垢、applicationContext.xml

該文件路徑應(yīng)為:根目錄"/"下,即:與package放在同一路徑下

<?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.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd"
        default-autowire="byType">
   
    <!-- 配置搜索組件的基礎(chǔ)包(父包) 將被注解的類的對(duì)象納入Spring IOC容器的管理 -->     
    <context:component-scan base-package="com.qfedu.dang"/>
    <!-- 使用注釋來配置需要Spring IOC容器托管的對(duì)象以及對(duì)象之間的依賴關(guān)系 -->
    <context:annotation-config />
    <!-- 配置為切面自動(dòng)生成代理 -->
    <aop:aspectj-autoproxy />
    
    <!-- SessionFactory, DataSource, etc. omitted -->
    
    <!-- 配置連接池袖裕,用空間換時(shí)間 -->
    <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/dang?useUnicode=true&CharacterEncoding=utf8"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
        <property name="initialSize" value="10"/>
        <property name="maxTotal" value="50"/>
        <property name="maxWaitMillis" value="15000"/>    
    </bean>

    <!-- 配置hibernate會(huì)話工廠 -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="packagesToScan" value="com.qfedu.dang.entity"/>
        <property name="hibernateProperties">
            <value>
                hibernate.dialect=org.hibernate.dialect.MySQLDialect
                hibernate.show_sql=true
                hibernate.format_sql=true
            </value>
        </property>
    </bean>

    <!-- 配置hibernate的事務(wù)管理器 -->
    <bean id="transactionManager"
            class="org.springframework.orm.hibernate5.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

    <tx:annotation-driven/>

</beans>

- 2曹抬、frontController-servlet.xml

該文件是配置視圖控制器的,在其中可以設(shè)置前綴后綴等
該文件路徑應(yīng)為:"/WEB-INF"下

<?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"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd"
        default-autowire="byType">
   
    <!-- 配置搜索組件的基礎(chǔ)包(父包) 將被注解的類的對(duì)象納入Spring IOC容器的管理 -->     
    <context:component-scan base-package="com.qfedu.dang.controller"/>
    <!-- 使用注釋來配置需要Spring IOC容器托管的對(duì)象以及對(duì)象之間的依賴關(guān)系 -->
    <context:annotation-config />
    
    <!-- 配置Spring MVC 的視圖解析器 (渲染視圖完成模型和視圖的綁定)-->
    <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

</beans>

- 3急鳄、web.xml

這個(gè)文件尤其重要谤民,這是這個(gè)項(xiàng)目的配置文件,我們可以在里面配置很多東西疾宏,比如默認(rèn)頁面张足、前端控制器、過濾器坎藐、監(jiān)聽器等

該文件路徑為:"/WEB-INF"下为牍,這個(gè)文件可以在創(chuàng)建項(xiàng)目時(shí)勾選選項(xiàng)自動(dòng)生成,此處強(qiáng)烈建議留下這個(gè)web.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="person" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    
    <welcome-file-list>
        <welcome-file>index.do</welcome-file>
    </welcome-file-list>
    
    <!-- 通過配置上下文參數(shù)來指定Spring配置文件的位置 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:app.xml</param-value>
    </context-param>
 
    <!-- 配置web項(xiàng)目的前端控制器(filter或者servlet) -->
    <servlet>
        <servlet-name>fc</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>fc</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
 
    <!-- 上下文監(jiān)聽器岩馍,創(chuàng)建Spring IOC容器 -->
    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>
</web-app>

@Section two : .class

現(xiàn)在的開發(fā)者們大都比較喜歡使用代碼配置代碼的方式來給項(xiàng)目進(jìn)行配置碉咆,最新的springframework的官方文檔中最開始也是介紹如何使用該配置方法的,也是先推薦使用的方法蛀恩。但是在實(shí)際開發(fā)中疫铜,可能會(huì)遇到一些遺留項(xiàng)目,這些遺留項(xiàng)目大多都是使用.xml配置文件進(jìn)行配置的双谆,所以還是要掌握使用xml配置文件壳咕。

在寫這些文件的時(shí)候,我們可以單獨(dú)給它們創(chuàng)建一個(gè)包顽馋,把所有的配置文件類都集中在放在這個(gè)包底下谓厘,集中管理。
大體結(jié)構(gòu)如圖:


來自 - 我的馬兒有些瘦

具體代碼如下:
- 1趣避、APPConfig.java

這個(gè)類和上面的applicationContext.xml文件的作用是一樣的庞呕,用于springIOC容器的配置,可以在其中創(chuàng)建bean,納入springIOC容器的管理住练,同時(shí)整合hibernate配置連接池(c3p0或者dbcp2地啰,只要加入相應(yīng)的jar包即可),創(chuàng)建數(shù)據(jù)源對(duì)象(DataSource)讲逛、會(huì)話工廠對(duì)象(SessionFactory)和事務(wù)管理器(TransactionManager)亏吝,以便業(yè)務(wù)管理處理時(shí)自動(dòng)注入這些需要的對(duì)象。

import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp2.BasicDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.orm.hibernate5.HibernateTransactionManager;
import org.springframework.orm.hibernate5.LocalSessionFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@Configuration
@EnableAspectJAutoProxy
@EnableTransactionManagement
@ComponentScan(basePackages = "com.qfedu.springmvc" )
public class AppConfig {
    
    @Bean
    public DataSource dataSource () {
        BasicDataSource dataSource = new BasicDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/dang?useUnicode=true&CharacterEncoding=utf8");
        dataSource.setUsername("root");
        dataSource.setPassword("123456");
        dataSource.setInitialSize(10);
        dataSource.setMaxTotal(50);
        dataSource.setMaxWaitMillis(15000);
        return dataSource;
    }
    
    @Bean
    public LocalSessionFactoryBean sessionFactory (DataSource dataSource) {
        LocalSessionFactoryBean bean = new LocalSessionFactoryBean();
        bean.setDataSource(dataSource);
        Properties props = new Properties();
        props.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQlDialect");
        props.setProperty("hibernate.show_sql", "true");
        props.setProperty("hibernate.format_sql", "true");
        bean.setHibernateProperties(props);
        return bean;
    }
    
    @Bean
    public HibernateTransactionManager transactionManager (DataSource dataSource) {
        HibernateTransactionManager tm = new HibernateTransactionManager();
        tm.setDataSource(dataSource);
        return tm;
    }

}

- 2盏混、MyWebAppInitializer.java(名字可以自己決定蔚鸥,一般顧名思義)

這個(gè)Java類的主要作用是初始化webapp,拿到SpringIOC容器的類的類對(duì)象许赃、springMVC的類的類對(duì)象止喷、以及配置映射路徑等。

這個(gè)類必須繼承AbstractAnnotationConfigDispatcherServletInitializer這個(gè)類混聊,重寫回調(diào)方法弹谁。

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        // 返回配置IOC容器的類的類對(duì)象
        return new Class<?>[] { AppConfig.class };
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        // 返回配置SpringMVC的類的類對(duì)象
        return new Class<?>[] { WebConfig.class};
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" }; //映射路徑
    }
}

- 3、WebConfig .java

這是在配置視圖解析器句喜,用于配合前端控制器使用预愤,在這里可以配置view的前綴和后綴

package com.qfedu.springmvc.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.qfedu.springmvc.controller")
public class WebConfig extends WebMvcConfigurerAdapter {
    
    @Bean
    public ViewResolver internalResourceViewResolver() {
        InternalResourceViewResolver  resolver = 
                new InternalResourceViewResolver();
        resolver.setViewClass(JstlView.class);
        resolver.setPrefix("/WEB-INF/jsp/");
        resolver.setSuffix(".jsp");
        return resolver;
    }

    // 為了保證靜態(tài)頁面不用做根路徑,做了以下處理
    @Override
    public void configureDefaultServletHandling(
            DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末咳胃,一起剝皮案震驚了整個(gè)濱河市植康,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌展懈,老刑警劉巖销睁,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異标沪,居然都是意外死亡榄攀,警方通過查閱死者的電腦和手機(jī)嗜傅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門金句,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人吕嘀,你說我怎么就攤上這事违寞。” “怎么了偶房?”我有些...
    開封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵趁曼,是天一觀的道長。 經(jīng)常有香客問我棕洋,道長挡闰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮摄悯,結(jié)果婚禮上赞季,老公的妹妹穿的比我還像新娘。我一直安慰自己奢驯,他們只是感情好申钩,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著瘪阁,像睡著了一般撒遣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上管跺,一...
    開封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天义黎,我揣著相機(jī)與錄音,去河邊找鬼豁跑。 笑死轩缤,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的贩绕。 我是一名探鬼主播火的,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼淑倾!你這毒婦竟也來了馏鹤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤娇哆,失蹤者是張志新(化名)和其女友劉穎湃累,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體碍讨,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡治力,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了勃黍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宵统。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖覆获,靈堂內(nèi)的尸體忽然破棺而出马澈,到底是詐尸還是另有隱情,我是刑警寧澤弄息,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布痊班,位于F島的核電站,受9級(jí)特大地震影響摹量,放射性物質(zhì)發(fā)生泄漏涤伐。R本人自食惡果不足惜馒胆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望凝果。 院中可真熱鬧国章,春花似錦、人聲如沸豆村。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽掌动。三九已至四啰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間粗恢,已是汗流浹背柑晒。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留眷射,地道東北人匙赞。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像妖碉,于是被迫代替她去往敵國和親涌庭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理欧宜,服務(wù)發(fā)現(xiàn)坐榆,斷路器,智...
    卡卡羅2017閱讀 134,637評(píng)論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法冗茸,類相關(guān)的語法席镀,內(nèi)部類的語法,繼承相關(guān)的語法夏漱,異常的語法豪诲,線程的語...
    子非魚_t_閱讀 31,602評(píng)論 18 399
  • 摘要:通過stdarg.h頭文件為函數(shù)提供了定義可變參數(shù)列表的能力。聲明一個(gè)可變參數(shù)的函數(shù)類似: void f1(...
    亂蓬頭199302閱讀 452評(píng)論 0 0
  • 很多時(shí)候都會(huì)對(duì)自己的前途迷茫挂绰,不知道這次的選擇是不是正確屎篱,之前到現(xiàn)在一直都在疑慮,但是開弓沒有回頭箭扮授,我走到這一步...
    緣也閱讀 129評(píng)論 0 0
  • 114慧極必傷芳室、情深不壽、強(qiáng)極則辱刹勃。 115人要結(jié)交兩種人:良師益友。兩項(xiàng)本領(lǐng):做事讓人感動(dòng)嚎尤、說話讓人喜歡荔仁。吃兩樣...
    羅掌柜real閱讀 388評(píng)論 0 0