SpringBoot_开发(2)

4、SpringMVC自动配置

1. Spring MVC auto-configuration

Spring Boot 提供了大多数场景下SpringMVC的配置

的默认配置(WebMvcAutoConfiguration)
  • Inclusion of ContentNegotiatingViewResolver and
    BeanNameViewResolver beans.
    • ViewResolver(视图解析器:根据方法的返回值得到视图对象(View),视图对象决定如何 渲染(转发?重定向?))
    • ContentNegotiatingViewResolver:组合所有的视图解析器
  • Support for serving static resources, including support for WebJars (see below).
    • 静态资源文件夹路径:webjars
  • Static index.html support.
    • 静态首页访问
  • 自动注册了 of Converter , GenericConverter , Formatter beans.
    • Converter:转换器; public String hello(User user):类型转换使用Converter
    • Formatter 格式化器; 2017.12.17===Date;
	@Bean 
	@ConditionalOnProperty(prefix = "spring.mvc", name = "date‐format")//在文件中配置日期格式化的规则
	public Formatter<Date> dateFormatter() { 
		return new DateFormatter(this.mvcProperties.getDateFormat());//日期格式化组件 
	}

自己添加的格式化器转换器,我们只需要放在容器中即可

  • Support for HttpMessageConverters (see below).
    • HttpMessageConverter:SpringMVC用来转换Http请求和响应的;User—Json;
    • HttpMessageConverters 是从容器中确定;获取所有的HttpMessageConverter;
    • 自己给容器中添加HttpMessageConverter,只需要将自己的组件注册容器中 (@Bean,@Component)
  • Automatic registration of MessageCodesResolver (see below).定义错误代码生成规则
  • Automatic use of a ConfigurableWebBindingInitializer bean (see below).
    • 我们可以配置一个ConfigurableWebBindingInitializer来替换默认的;(添加到容器)
初始化WebDataBinder; 
请求数据=====JavaBean;

2、扩展SpringMVC

	<mvc:view‐controller path="/hello" view‐name="success"/> 
	<mvc:interceptors> 
		<mvc:interceptor> 
			<mvc:mapping path="/hello"/> 
			<bean></bean> 
		</mvc:interceptor>
	</mvc:interceptors>

编写一个配置类(@Configuration),是WebMvcConfigurerAdapter类型;不能标注@EnableWebMvc;
既保留了所有的自动配置,也能用我们扩展的配置;

//使用WebMvcConfigurerAdapter可以来扩展SpringMVC的功能 
@Configuration 
public class MyMvcConfig extends WebMvcConfigurerAdapter { 

	@Override 
	public void addViewControllers(ViewControllerRegistry registry) { 
		// super.addViewControllers(registry); 
		//浏览器发送 /atguigu 请求来到 success 
		registry.addViewController("/atguigu").setViewName("success"); 
	} 
}
原理:

WebMvcAutoConfiguration是SpringMVC的自动配置类
在做其他自动配置时会导入;@Import(EnableWebMvcConfiguration.class)

	@Configuration 
	public static class EnableWebMvcConfiguration extends DelegatingWebMvcConfiguration { 
		private final WebMvcConfigurerComposite configurers = new WebMvcConfigurerComposite(); 

	//从容器中获取所有的WebMvcConfigurer 
		@Autowired(required = false) 
		public void setConfigurers(List<WebMvcConfigurer> configurers) { 
			if (!CollectionUtils.isEmpty(configurers)) { 
				this.configurers.addWebMvcConfigurers(configurers); 
				//一个参考实现;将所有的WebMvcConfigurer相关配置都来一起调用; 
				@Override 
				// public void addViewControllers(ViewControllerRegistry registry) { 
				// for (WebMvcConfigurer delegate : this.delegates) { 
				// delegate.addViewControllers(registry); 
				// } 
			} 
		} 
	}

容器中所有的WebMvcConfigurer都会一起起作用;
我们的配置类也会被调用;
效果:SpringMVC的自动配置和我们的扩展配置都会起作用;

3、全面接管SpringMVC;

SpringBoot对SpringMVC的自动配置不需要了,所有都是我们自己配置;所有的SpringMVC的自动配置都失效了
我们需要在配置类中添加@EnableWebMvc即可;

//使用WebMvcConfigurerAdapter可以来扩展SpringMVC的功能 
@EnableWebMvc @Configuration 
public class MyMvcConfig extends WebMvcConfigurerAdapter { 

	@Override 
	public void addViewControllers(ViewControllerRegistry registry) { 
		// super.addViewControllers(registry); 
		//浏览器发送 /atguigu 请求来到 success 
		registry.addViewController("/atguigu").setViewName("success"); 
	} 
}

原理

@EnableWebMvc的核心

@Import(DelegatingWebMvcConfiguration.class) 
public @interface EnableWebMvc {
@Configuration 
public class DelegatingWebMvcConfiguration extends WebMvcConfigurationSupport {
@Configuration 
@ConditionalOnWebApplication 
@ConditionalOnClass({ Servlet.class, DispatcherServlet.class, 
		WebMvcConfigurerAdapter.class }) 
		//容器中没有这个组件的时候,这个自动配置类才生效 @ConditionalOnMissingBean(WebMvcConfigurationSupport.class) 
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10) 
@AutoConfigureAfter({ DispatcherServletAutoConfiguration.class, 
	ValidationAutoConfiguration.class }) 
public class WebMvcAutoConfiguration {

@EnableWebMvc将WebMvcConfigurationSupport组件导入进来;
导入的WebMvcConfigurationSupport只是SpringMVC最基本的功能;

5、如何修改SpringBoot的默认配置

  1. SpringBoot在自动配置很多组件的时候,先看容器中有没有用户自己配置的(@Bean、@Component)如果有就用用户配置的,如果没有,才自动配置;如果有些组件可以有多个(ViewResolver)将用户配置的和自己默认的组合起来;
  2. 在SpringBoot中会有非常多的xxxConfigurer帮助我们进行扩展配置
  3. 在SpringBoot中会有很多的xxxCustomizer帮助我们进行定制配置

6、RestfulCRUD

1、默认访问首页

//使用WebMvcConfigurerAdapter可以来扩展SpringMVC的功能 
//@EnableWebMvc 不要接管SpringMVC
@Configuration 
public class MyMvcConfig extends WebMvcConfigurerAdapter {
	@Override
	public void addViewControllers(ViewControllerRegistry registry) {
		// super.addViewControllers(registry);
		//浏览器发送 /atguigu 请求来到 success
		registry.addViewController("/atguigu").setViewName("success");
	}
	
	//所有的WebMvcConfigurerAdapter组件都会一起起作用
	@Bean //将组件注册在容器
	public WebMvcConfigurerAdapter webMvcConfigurerAdapter(){
		WebMvcConfigurerAdapter adapter = new WebMvcConfigurerAdapter() {
			@Override
			public void addViewControllers(ViewControllerRegistry registry) {
			registry.addViewController("/").setViewName("login"); 
			registry.addViewController("/index.html").setViewName("login"); 
			} 
		};
		return adapter; 
	} 
}

2、国际化

  1. 编写国际化配置文件;
  2. 使用ResourceBundleMessageSource管理国际化资源文件
  3. 在页面使用fmt:message取出国际化内容
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值