上一篇講了基於XML配置的構建,這一篇講一講基於JavaConfig的構建。為什么要寫這篇文章,因為基於xml配置的構建,本人認為很麻煩,要寫一堆的配置,不夠簡潔,而基於JavacConfig配置的構建符合程序員的編碼習慣,是SpringMVC以后的趨勢。不是說基於XML配置的不好,畢竟現在很多已有的項目都是基於XML的,只是基於JavaConfig配置的更優化,而且兩種方式可以魚和熊掌兼得。但要知道的是,基於JavaConfig配置構建的Spring MVC項目只能部署到支持Servlet 3.0服務器上面。
進入正題,開始搭建項目:
搭建環境:
1. IDEA
2. Maven
3. Tomcat
搭建步驟:
1. 創建maven-archetype-webapp項目,這個項目是maven的web項目
2.在pom中添加sping mvc相關的依賴包,這個依賴包是我自己使用的,包含了單元測試和相關的mvc mock包:
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/javax.servlet.jsp.jstl-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>1.10.1.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.3.8.RELEASE</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>2.8.47</version>
</dependency>
</dependencies>
3.將DispatcherSevlet配置在Servlet容器中
public class SpittrWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
/*加載后端的中間層和數據層組件*/
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[]{RootConfig.class};
}
/*加載web組件,控制器、試圖解析器、處理器映射*/
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[]{WebConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
}
示例代碼中要知道的是,任何擴展了AbstractAnnotationConfigDispatcherServletInitializer的類都會自動配置DispatcherServlet和Spring應用上下文。實際上,AbstractAnnotationConfigDispatcherServletInitializer會同時創建DispatcherServlet和ContextLoaderListener。getServletConfigClasses()方法返回的帶有@Configuration注解的類會用來定義DispatcherServlet應用上下文中的bean。getRootConfigClasses()方法返回的帶有@Configuration注解的類會用來定義ContextLoaderListener應用上下文中的bean。
4.創建WebConfig類
@Configuration
@EnableWebMvc
@ComponentScan("spittr.web")
public class WebConfig extends WebMvcConfigurerAdapter {
/*配置視圖解析器*/
@Bean
public ViewResolver viewResolver(){
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
resolver.setExposeContextBeansAsAttributes(true);
return resolver;
}
/*配置靜態資源的處理*/
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
5.創建RootConfig類
@Configuration
@ComponentScan(basePackages = {"spittr"},excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION,value = EnableWebMvc.class)})
public class RootConfig {
}
6,到這里配置已經結束。怎樣創建Controller和運行請參考上一篇基於XML配置的Spring MVC。
7.最后附上源碼:源碼
