`
hanqunfeng
  • 浏览: 1526403 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SpringMVC4零配置--Web上下文配置【MvcConfig】

 
阅读更多

与SpringSecurity的配置类似,spring同样为我们提供了一个实现类WebMvcConfigurationSupport和一个注解@EnableWebMvc以帮助我们减少bean的声明。

 

applicationContext-MvcConfig.xml

<!-- 启用注解,并定义组件查找规则 ,mvc层只负责扫描@Controller -->
	<context:component-scan base-package="web.function"
		use-default-filters="false">
		<context:include-filter type="annotation"
			expression="org.springframework.stereotype.Controller" />
	</context:component-scan>




	<!-- 视图处理器 -->
	<bean id="viewResolver"
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/views/jsp/function/" />
		<property name="suffix" value=".jsp" />
	</bean>

	<!-- 定义国际化资源文件查找规则 ,各种messages.properties -->
	<bean id="messageSource"
		class="org.springframework.context.support.ResourceBundleMessageSource"
		p:basename="config.messages.messages">
	</bean>

	<!-- servlet适配器,这里必须明确声明,因为spring默认没有初始化该适配器 -->
	<bean id="servletHandlerAdapter"
		class="org.springframework.web.servlet.handler.SimpleServletHandlerAdapter" />

	<!-- 定义文件上传处理器 -->
	<bean id="multipartResolver"
		class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
		p:defaultEncoding="UTF-8" />

	<!-- 异常处理器 -->
	<bean id="exceptionResolver" class="web.core.CP_SimpleMappingExceptionResolver">
		<property name="defaultErrorView" value="common_error" />
		<property name="exceptionAttribute" value="exception" />
		<property name="exceptionMappings">
			<props>
				<prop key="java.lang.RuntimeException">common_error</prop>
			</props>
		</property>
	</bean>


	<!-- 定义公共参数初始化拦截器 -->
	<bean id="initInterceptor" class="web.core.CP_InitializingInterceptor" />




	<!-- 本地化资源处理器 -->
	<bean id="localeResolver"
		class="org.springframework.web.servlet.i18n.CookieLocaleResolver" />

	<!-- 定义本地化变更拦截器 -->
	<bean id="localeChangeInterceptor"
		class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />


	<!-- 请求拦截器,每一个用户请求都会被拦截 -->
	<mvc:interceptors>
		<ref bean="localeChangeInterceptor" />
		<ref bean="initInterceptor" />
	</mvc:interceptors>




	<!-- 定义注解驱动Controller方法处理适配器 ,注:该适配器必须声明在<mvc:annotation-driven />之前,否则不能正常处理参数类型的转换 -->
	<bean
		class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
		<property name="webBindingInitializer">
			<bean class="web.core.CP_PropertyEditorRegistrar">
				<property name="format" value="yyyy-MM-dd"></property>
			</bean>
		</property>
		<property name="messageConverters">
			<list>
				<bean
					class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter" />
				<bean
					class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
			</list>
		</property>
	</bean>


	<!-- 会自动注册RequestMappingHandlerMapping与RequestMappingHandlerAdapter 
		两个bean,是spring MVC为@Controllers分发请求所必须的。 并提供了:数据绑定支持,@NumberFormatannotation支持,@DateTimeFormat支持,@Valid支持,读写XML的支持(JAXB),读写JSON的支持(Jackson) -->
	<mvc:annotation-driven />


	<!-- 资源访问处理器 -->
	<mvc:resources mapping="/static/**" location="/WEB-INF/static/" />

 MvcConfig.java

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "web.function", useDefaultFilters = false, includeFilters = {
        @ComponentScan.Filter(type = FilterType.ANNOTATION, value = {Controller.class})
})
public class MvcConfig extends WebMvcConfigurationSupport {
	
	private static final Logger logger = Logger
			.getLogger(MvcConfig.class);

    /**                                                          
    * 描述 : <注册试图处理器>. <br> 
    *<p> 
    	<使用方法说明>  
     </p>                                                                                                                                                                                                                                                
    * @return                                                                                                      
    */  
    @Bean
    public ViewResolver viewResolver() {
    	logger.info("ViewResolver");
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setPrefix("/WEB-INF/views/jsp/function/");
        viewResolver.setSuffix(".jsp");
        return viewResolver;
    }
    
    /**                                                          
    * 描述 : <注册消息资源处理器>. <br> 
    *<p> 
    	<使用方法说明>  
     </p>                                                                                                                                                                                                                                                
    * @return                                                                                                      
    */  
    @Bean
    public MessageSource messageSource() {
    	logger.info("MessageSource");
    	ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
    	messageSource.setBasename("config.messages.messages");
    	
    	return messageSource;
    }
    
    /**                                                          
    * 描述 : <注册servlet适配器>. <br> 
    *<p> 
    	<只需要在自定义的servlet上用@Controller("映射路径")标注即可>  
     </p>                                                                                                                                                                                                                                                
    * @return                                                                                                      
    */  
    @Bean
    public HandlerAdapter servletHandlerAdapter(){
    	logger.info("HandlerAdapter");
    	return new SimpleServletHandlerAdapter();
    }
    
    /**                                                          
    * 描述 : <本地化拦截器>. <br> 
    *<p> 
    	<使用方法说明>  
     </p>                                                                                                                                                                                                                                                
    * @return                                                                                                      
    */  
    @Bean
    public LocaleChangeInterceptor localeChangeInterceptor(){
    	logger.info("LocaleChangeInterceptor");
    	return new LocaleChangeInterceptor();
    }
    
    /**                                                          
    * 描述 : <基于cookie的本地化资源处理器>. <br> 
    *<p> 
    	<使用方法说明>  
     </p>                                                                                                                                                                                                                                                
    * @return                                                                                                      
    */  
    @Bean(name="localeResolver")
    public CookieLocaleResolver cookieLocaleResolver(){
    	logger.info("CookieLocaleResolver");
    	return new CookieLocaleResolver();
    }
    
    /**                                                          
    * 描述 : <注册自定义拦截器>. <br> 
    *<p> 
    	<使用方法说明>  
     </p>                                                                                                                                                                                                                                                
    * @return                                                                                                      
    */  
    @Bean
    public CP_InitializingInterceptor initializingInterceptor(){
    	logger.info("CP_InitializingInterceptor");
    	return new CP_InitializingInterceptor();
    }
    
    
    /**                                                          
     * 描述 : <RequestMappingHandlerMapping需要显示声明,否则不能注册自定义的拦截器>. <br> 
     *<p> 
     	<这个比较奇怪,理论上应该是不需要的>  
      </p>                                                                                                                                                                                                                                                
     * @return                                                                                                      
     */ 
    @Bean
	public RequestMappingHandlerMapping requestMappingHandlerMapping() {
    	logger.info("RequestMappingHandlerMapping");
		
		return super.requestMappingHandlerMapping();
	}
    
    
    
    
    

    /**                                                          
    * 描述 : <添加拦截器>. <br> 
    *<p> 
    	<使用方法说明>  
     </p>                                                                                                                                                                                                                                                
    * @param registry                                                                                                      
    */  
    @Override
	protected void addInterceptors(InterceptorRegistry registry) {
		// TODO Auto-generated method stub
    	logger.info("addInterceptors start");
		registry.addInterceptor(localeChangeInterceptor());
		registry.addInterceptor(initializingInterceptor());
		logger.info("addInterceptors end");
	}

    /**                                                          
     * 描述 : <HandlerMapping需要显示声明,否则不能注册资源访问处理器>. <br> 
     *<p> 
     	<这个比较奇怪,理论上应该是不需要的>  
      </p>                                                                                                                                                                                                                                                
     * @return                                                                                                      
     */ 
    @Bean
	public HandlerMapping resourceHandlerMapping() {
    	logger.info("HandlerMapping");
    	return super.resourceHandlerMapping();
    }
    
    /**                                                          
     * 描述 : <资源访问处理器>. <br> 
     *<p> 
     	<可以在jsp中使用/static/**的方式访问/WEB-INF/static/下的内容>  
      </p>                                                                                                                                                                                                                                                
     * @param registry                                                                                                      
     */  
	@Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
		logger.info("addResourceHandlers");
        registry.addResourceHandler("/static/**").addResourceLocations("/WEB-INF/static/");
    }
    
	/**                                                          
	* 描述 : <文件上传处理器>. <br> 
	*<p> 
		<使用方法说明>  
	 </p>                                                                                                                                                                                                                                                
	* @return                                                                                                      
	*/  
	@Bean(name="multipartResolver")
	public CommonsMultipartResolver commonsMultipartResolver(){
		logger.info("CommonsMultipartResolver");
		return new CommonsMultipartResolver();
	}
	
	/**                                                          
	* 描述 : <异常处理器>. <br> 
	*<p> 
		<系统运行时遇到指定的异常将会跳转到指定的页面>  
	 </p>                                                                                                                                                                                                                                                
	* @return                                                                                                      
	*/  
	@Bean(name="exceptionResolver")
	public CP_SimpleMappingExceptionResolver simpleMappingExceptionResolver(){
		logger.info("CP_SimpleMappingExceptionResolver");
		CP_SimpleMappingExceptionResolver simpleMappingExceptionResolver= new CP_SimpleMappingExceptionResolver();
		simpleMappingExceptionResolver.setDefaultErrorView("common_error");
		simpleMappingExceptionResolver.setExceptionAttribute("exception");
		Properties properties = new Properties();
		properties.setProperty("java.lang.RuntimeException", "common_error");
		simpleMappingExceptionResolver.setExceptionMappings(properties);
		return simpleMappingExceptionResolver;
	}
	
	 /**                                                          
     * 描述 : <RequestMappingHandlerAdapter需要显示声明,否则不能注册通用属性编辑器>. <br> 
     *<p> 
     	<这个比较奇怪,理论上应该是不需要的>  
      </p>                                                                                                                                                                                                                                                
     * @return                                                                                                      
     */ 
	@Bean
	public RequestMappingHandlerAdapter requestMappingHandlerAdapter() {
		logger.info("RequestMappingHandlerAdapter");
    	return super.requestMappingHandlerAdapter();
	}
	
	/**                                                          
	* 描述 : <注册通用属性编辑器>. <br> 
	*<p> 
		<这里只增加了字符串转日期和字符串两边去空格的处理>  
	 </p>                                                                                                                                                                                                                                                
	* @return                                                                                                      
	*/  
	@Override
	protected ConfigurableWebBindingInitializer getConfigurableWebBindingInitializer() {
		logger.info("ConfigurableWebBindingInitializer");
		ConfigurableWebBindingInitializer initializer = super.getConfigurableWebBindingInitializer();
		CP_PropertyEditorRegistrar register = new CP_PropertyEditorRegistrar();
		register.setFormat("yyyy-MM-dd");
		initializer.setPropertyEditorRegistrar(register);
		return initializer;
	}
    
    
}

 

SpringMVC4零配置 :代码下载

SpringMVC4零配置--web.xml

SpringMVC4零配置--应用上下文配置【AppConfig】

SpringMVC4零配置--SpringSecurity相关配置【SpringSecurityConfig】

SpringMVC4零配置--Web上下文配置【MvcConfig】

分享到:
评论
5 楼 linxingyul 2016-10-20  
根据楼主的代码 继承了WebMvcConfigurationSupport,可是debugger的时候,发现我重写的extendMessageConverters() 没有起作用,代码一直走到DelegatingWebMvcConfiguration类中,请问是为什么,
spring版本是 4.3.3
4 楼 java_老头 2016-10-20  
MvcConfig.java的FilterType.ANNOTATION 报错,为何呢?
3 楼 ly908979139 2016-08-17  
看大把的书和教程,没有源码完全是没法具体操作,根据您的代码和文字说明,非常精简实用、通俗易懂。
2 楼 left_ 2016-06-07  
撸主这是零配置?
1 楼 Eikistain 2016-03-07  
 

相关推荐

Global site tag (gtag.js) - Google Analytics