• Web MVC 注解驱动


    Web MVC 注解驱动

    版本要求Spring Framework 3.1 +

    基本配置步骤

    • 注解配置: @Configuration ( Spring 范式注解 )
    • 组件激活: @EnableWebMvc (Spring 模块装配)
    • 自定义组件 : WebMvcConfigurer (Spring Bean)

    原理

    在@EnableWebMvc注解中导入了DelegatingWebMvcConfiguration配置类,其父类WebMvcConfigurationSupport配置了许多HandlerMapping和HandlerAdapter以及ViewResolver类

    实现注解驱动

    • 开启xml包扫描
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd">
    
        <context:component-scan base-package="com.imooc.web"/>
    </beans>
    
    • 编写配置类,添加@Configuration和@EnableWebMvc注解,配置ViewResolverBean
    @Configuration
    @EnableWebMvc
    public class WebMvcConfig{
        @Bean
        public ViewResolver viewResolver(){
            InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
            viewResolver.setViewClass(JstlView.class);
            viewResolver.setPrefix("/WEB-INF/jsp/");
            viewResolver.setSuffix(".jsp");
            return viewResolver;
        }
    }
    
    • 上面的配置类也可以选择继承WebMvcConfigurer接口,里面提供了默认方法都是空实现,所以里面的方法不不必都实现,一下示例重写添加拦截器的方法添加拦截器
    @Configuration
    @EnableWebMvc
    public class WebMvcConfig implements WebMvcConfigurer {
        @Bean
        public ViewResolver viewResolver(){
            InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
            viewResolver.setViewClass(JstlView.class);
            viewResolver.setPrefix("/WEB-INF/jsp/");
            viewResolver.setSuffix(".jsp");
            return viewResolver;
        }
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(new HandlerInterceptor() {
                @Override
                public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
                    System.out.println("拦截中...");
                    return true;
                }
            });
        }
    }
    
    • 上述方法添加拦截器底层实现
      @EnableWebMvc注解中导入的DelegatingWebMvcConfiguration中有以下所示成员变量和方法
    public class DelegatingWebMvcConfiguration extends WebMvcConfigurationSupport {
    	private final WebMvcConfigurerComposite configurers = new WebMvcConfigurerComposite();
    	@Autowired(required = false)
    	public void setConfigurers(List<WebMvcConfigurer> configurers) {
    		if (!CollectionUtils.isEmpty(configurers)) {
    			this.configurers.addWebMvcConfigurers(configurers);
    		}
    	}
    

    它将所有实现WebMvcConfigurer接口的类注入到configurers(WebMvcConfigurerComposite)成员变量中,此变量是个组合对象,WebMvcConfigurerComposite类中如下变量

    private final List<WebMvcConfigurer> delegates = new ArrayList<>();
    

    WebMvcConfigurerComposite将调用如下方法注册拦截器

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
    	for (WebMvcConfigurer delegate : this.delegates) {
    		delegate.addInterceptors(registry);
    	}
    }
    
  • 相关阅读:
    孩孩,你妈正在生你。。。。。。。。
    想写点关于fpga以及软核nios2的入门文章
    源代码阅读工具SourceNavigator 在ubuntu 9.04下的安装与问题解决
    真理与知识
    需要思考的十对矛盾
    【Git】将已被推送到远程仓库的文件or文件夹,从远端删除
    明天是个大日子
    C# 编码规范
    Linux 登录 Mysql 数据库
    Linux Ubuntu 16.04 安装 .Net Core
  • 原文地址:https://www.cnblogs.com/fjf3997/p/13041431.html
Copyright © 2020-2023  润新知