自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
再來要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有人在介紹,順便跟大家分享。