基于注解配置Spring MVC
在旧版本中,DispatcherServlet之类的servlet一般在web.xml文件中配置,该文件一般会打包进最后的war包种;但是Spring 3引入了注解,我们在这一章将展示如何基于注解配置Spring MVC。
既然不适用web.xml文件,你需要在servlet容器中使用Java配置DispatcherServlet,具体的代码列举如下
/** * 实现spring MVC * @author xla */ public class TestConfig extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Class<?>[] getRootConfigClasses() { return new Class[] {RootConfig.class}; } @Override protected Class<?>[] getServletConfigClasses() { return new Class[]{WebConfig.class}; } @Override protected String[] getServletMappings() { return new String[]{"/"}; } }
RootConfig 配置 扫描包,进行创建bean
@Configuration @ComponentScan(basePackages = {"com.yuelinghui"},excludeFilters ={@ComponentScan.Filter(type = FilterType.ANNOTATION,value = EnableWebMvc.class)}) public class RootConfig { }WebConfig 处理视图
@Configuration @EnableWebMvc @ComponentScan("com.yuelinghui.controller") public class WebConfig extends WebMvcConfigurerAdapter{ /** * 配置视图解析器 * @return */ @Bean public ViewResolver viewResolver() { InternalResourceViewResolver internalResourceViewResolver = new InternalResourceViewResolver(); internalResourceViewResolver.setPrefix("/WEB-INF/view2.0/"); internalResourceViewResolver.setSuffix(".html"); internalResourceViewResolver.setExposeContextBeansAsAttributes(true); return internalResourceViewResolver; } /** * 配置静态资源 * @param configurer */ @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); } }
通过上述配置 web.xml 就不需要加载 DispatcherServlet 更加简便 (但是tomcat 必须要支持 servlet3.0)
测试 我们通过spring提供的测试类
MockMvc 参考(https://docs.spring.io/spring/docs/current/javadocapi/org/springframework/test/web/servlet/MockMvc.html)
/** * 测试 */ public class SpringMVCTest { MockMvc mockMvc; @Before public void setupMock() { CouponController couponController = new CouponController(); mockMvc = MockMvcBuilders.standaloneSetup(couponController).build(); } @Test public void test() throws Exception { MvcResult mvcResult = mockMvc.perform(get("/coupon/coupon").param("type", "1")).andReturn(); System.out.println(mvcResult.getResponse().getContentAsString()); } }
具体参考:https://segmentfault.com/a/1190000004343063?_ea=575820