iT邦幫忙

DAY 5
0

無痛學習SpringMVC與Spring Security系列 第 5

以Java Config取代XML組態檔-以Dispatch Servlet為例

自Spring 3.1開始支援撰寫java class來初始化spring容器,或是更廣泛的說初始化beans,官方稱作Java Config,這種Configuration的class,在class name前面要寫@Configuration,我們以昨天的dispatch servlet的mvcconfig.xml轉換成Java Config為例,首先新增mvcconfig class於tw.blogger.springtech.springmvc.mvc.config底下,其code如下:

@Configuration
@EnableWebMvc
@ComponentScan(basePackages={"tw.blogger.springtech.springmvc.mvc"})
public class MVCConfig extends WebMvcConfigurerAdapter{
	
	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**").addResourceLocations("/resources/").setCachePeriod(31556926);
    }

    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        return resolver;
    }
    
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
    	configurer.enable();
    };
}

除了@Configuration之外,介紹一下其餘的Annotation,因為我們撰寫的是Spring MVC,所以class

  1. 必須繼承WebMvcConfigurerAdapter,通常會override resourceshandler
  2. 必須寫@EnableWebMVC,這就是對應到組態檔裡的<mvc:annotation-driven>

再來要enable DefaultServletHandlerConfigurer,這我就不是很清楚為什麼了,但是沒有寫,Hello!World還是出的來,有空再看一下官方文件好了。

@Bean就是對應到組態檔的bean囉,只是XML裡相關參數用property標籤設定,在Java class裡就要用set方法來設定參數。

@ComponentScan也是跟組態檔裡的ComponentScan是一樣的,差別在於Annotation有分basePackage和baskePackages,後者參數是陣列,代表多個basepackages

同時,web.xml也需要修改,因為我們現在已經是用Java Config的方式初始化Dispatch Servlet,springframework裡面對應的class以及對應的參數也要修改成剛剛的Java Config的class,程式碼如下:

<servlet>
        <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextClass</param-name>
            <param-value>
                org.springframework.web.context.support.AnnotationConfigWebApplicationContext
            </param-value>
        </init-param>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
                tw.blogger.springtech.springmvc.config.MVCConfig
            </param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

重新啟動Server,網頁亦成功載入。

既然XML組態設定檔程式就可以動了,為什麼還要了解Java Config如何設定與使用,Spring開始支援Java Config的時候就各個的支持者,優點與缺點到了現在我認為變成了其次的問題,因為現在Spring Project多了一個Spring Boot,其目的就是作最少的設定,例如前幾天dependencies,他都幫我們包裝好了,STS現在也支援Spring Boot,Spring Boot產生的專案可以看到沒有web.xml以及spring的組態設定點,意味著Spring Boot建議你用Java Config來設定Dependency Injection以及相關Bean,當然我也還沒開始學,只是youtube有人在介紹,順便跟大家分享。


上一篇
Spring MVC處理Request流程介紹
下一篇
以Java Config Class初始化Java Web應用程式(web.xml free)
系列文
無痛學習SpringMVC與Spring Security31

1 則留言

0
noway
iT邦新手 5 級 ‧ 2017-01-01 10:23:02

您好:
第4天 沒有說到mvcconfig.xml
請問這是在哪邊?
謝謝!

我要留言

立即登入留言