上一篇講了基于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 {/*加載后端的中間層和數據層組件*/@Overrideprotected Class<?>[] getRootConfigClasses() {return new Class<?>[]{RootConfig.class};}/*加載web組件,控制器、試圖解析器、處理器映射*/@Overrideprotected Class<?>[] getServletConfigClasses() {return new Class<?>[]{WebConfig.class};}@Overrideprotected 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 {/*配置視圖解析器*/@Beanpublic ViewResolver viewResolver(){InternalResourceViewResolver resolver = new InternalResourceViewResolver();resolver.setPrefix("/WEB-INF/views/");resolver.setSuffix(".jsp");resolver.setExposeContextBeansAsAttributes(true);return resolver;}/*配置靜態資源的處理*/@Overridepublic 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.最后附上源碼:源碼