基于注解配置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

猜你喜欢

转载自blog.csdn.net/qq_24184997/article/details/80846000