springMvc基于java代码的配置

  一般springMVC使用xml来进行项目配置,当spring到3.2版本时,通过支持Servlet3.0规范,springMVC也可以通过代码来进行配置。
  在servlet3.0规范中,容器会自己查找实现了javax.servlet.ServletContainerInitializer接口的类,并使用它来配置servlet容器。
  spring提供了这个接口的实现SpringServletContainerInitializer,这个类会查找实现了WebApplicationInitializer的类并且让他们来完成配置。
  Spring3.2引入了一个便利的基础实现AbstractAnnotationConfigDispatcherServletInitializer,这个类实现了WebApplicationInitializer,所以继承他就可以做到通过java代码实现servlet的上下文配置。
  springmvc有两个关键的上下文配置,一个dispatcher上下文 ,一个spring上下文,servlet中对应的是dispatcherServlet和ContextLoaderListener。当dispatcherServlet启动的时候,会自动创建spring应用的上下文,并加载相应的配置和bean,这些bean主要是web相关的bean和组件。而ContextLoaderListener则负责加载后台中间层和数据层的组件。
  首先编写一个配置dispatcher上下文的类,MvcConfig:
  

//声明为spring的配置类
@Configuration
//开启springMvc
@EnableWebMvc
//开启组件扫描,注意只扫描web相关的内容
@ComponentScan("com.wk.controller")
public class MvcConfig extends WebMvcConfigurerAdapter{
    /**
     * 配置jsp的视图解析器
     * @return InternalResourceViewResolver
     */
    @Bean
    public ViewResolver viewResolver(){
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setPrefix("/WEB-INF/views");
        viewResolver.setSuffix(".jsp");
        viewResolver.setExposeContextBeansAsAttributes(true);
        return viewResolver;
    }

    /**
     * 启用servlet容器对静态资源的处理
     * @param configurer 配置
     */
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }
}

注释写的很清楚,就不讲解了。

然后编写spring上下文的java配置文件,RootConfig:

@Configuration
//扫描bean,过滤web相关的
@ComponentScan(basePackages = {"com.wk"},
    excludeFilters = {
        @ComponentScan.Filter(type = FilterType.ANNOTATION, value = EnableWebMvc.class)
    }
)
public class RootConfig {
}

最后编写实现了WebApplicationInitializer的实现类,WebAppInitializer:

public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    /**
     * 配置spring上下文
     * @return config
     */
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class<?>[]{RootConfig.class};
    }

    /**
     * 配置dispatcher上下文
     * @return config
     */
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class<?>[]{MvcConfig.class};
    }

    /**
     * 绑定dispatcher的映射路径
     * @return paths
     */
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}

这样springmvc的配置就完成了,可以测试一下:

@RestController
public class TestController {
    @GetMapping("/")
    public String test(){
        return "xxxxxx";
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值