以下是SpringBoot文件的網址
https://docs.spring.io/spring-boot/docs/1.5.12.RELEASE/reference/htmlsingle/#boot-features-developing-web-applications
1. auto-configuration
Spring Boot provides auto-configuration for Spring MVC that works well with most applications.
Spring Boot自動配置好了SpringMVC
The auto-configuration adds the following features on top of Spring’s defaults:
他的自動配置包含了以下Spring的初始特色
- Inclusion of
ContentNegotiatingViewResolver
andBeanNameViewResolver
beans.
ContentNegotiatinViewResolver:用來組合所有視圖解析器的
他自動配置了ViewResolver(視圖解析器:根據方法來取得試圖對象(View), 由視圖對象決定可轉載或著重定向)
制定方式:
在main application下面定義回傳ViewResolver的方法
回傳一個私有的繼承ViewResolver的類別
@Bean
public ViewResolver myViewResolver(){
return new MyViewResolver();
}
private class MyViewResolver implements ViewResolver {
@Override
public View resolveViewName(String viewName, Locale locale) throws Exception {
return null;
}
}
我們如何知道這個會work呢?
主要是使用debug模式觀察DispatcherServlet中的doDispatch方法(用control+n找)
將中斷點下在這裡
當我們啟動之後, 訪問一個頁面, 我們就會看到
在this中他有multipartResolver文件上傳的, localeResolver國際化功能的Resolver
而我們要看的是viewResolvers中有我們的MyViewResolver的確進來了
也就是只要通過添加組件(Bean)就能夠使用
Support for serving static resources, including support for WebJars (see below).靜態資源文件夾路徑 webjars
Static
index.html
support. 靜態首頁訪問Custom
Favicon
support (see below).favicon.icoAutomatic registration of
Converter
,GenericConverter
,Formatter
beans.- 自動註冊
Converter
,GenericConverter
,Formatter
- Converter:轉換器;public String hello(User user);類別轉換使用
- Formatter:格式化器;2017-12-17===Date;
- 自動註冊
自己添加的格式化器转换器,我们只需要放在容器中即可;
Support for
HttpMessageConverters
(see below).HttpMessageConverters:SpringMVC用來轉換Http請求和響應的;User---json;
HttpMessageConverters:是從容器中確定的;獲取所有的HttpMessageConverters;
自己给容器中添加HttpMessageConverter,只需要將自己的组件注册到容器中(@Bean,@Component)
Automatic registration of
MessageCodesResolver
(see below).- 定義錯誤代碼產生規則
Automatic use of a
ConfigurableWebBindingInitializer
bean (see below).- 我們可以配置一个ConfigurableWebBindingInitializer來替換默認的;(添加到容器)
---------------------------
2. 擴展SpringMVC
If you want to keep Spring Boot MVC features, and you just want to add additional MVC configuration (interceptors, formatters, view controllers etc.) you can add your own @Configuration
class of type WebMvcConfigurerAdapter
, but without @EnableWebMvc
. If you wish to provide custom instances of RequestMappingHandlerMapping
, RequestMappingHandlerAdapter
or ExceptionHandlerExceptionResolver
you can declare a WebMvcRegistrationsAdapter
instance providing such components.
If you want to take complete control of Spring MVC, you can add your own @Configuration
annotated with @EnableWebMvc
.
-------------------------
這段的意思就是~如果有些Spring MVC的功能不在初始設定中
但是你想要使用的話, 你可以新增一個類別符合他的設定, 他就會掃得到裡面的設定
那要注意的是, 如果加上@EnableWebMvc的話
對於SpringMVC的配置, 你就要自己全部重配了
連初始會去掃靜態頁面的功能, 也會需要自己手動建立導頁
------------------------
比方說以下我們想使用Spring轉頁功能, 將hello頁面轉到success頁面
<mvc:view-controller path="/hello" view-name="success"/>
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/hello"/>
<bean></bean>
</mvc:interceptor>
</mvc:interceptors>
以上在SpringMVC中的設置
我們在SpringBoot中可以用以下方式完成
先建立config.MymvcConfig類別, 去繼承WebMvcConfigurerAdapter類別
其中的addViewController方法就能完成我們要做的事(可用control+o查看所有方法)
//使用WebMvcConfigurerAdapter 可以來擴展SpringMVC的功能
@Configuration
public class MyMvcConfig extends WebMvcConfigurerAdapter {
//按control+O 可以找到父類所有可用方法
@Override
public void addViewControllers(ViewControllerRegistry registry) {
//super.addViewControllers(registry);
//瀏覽器發送/atguigu請求來到success
registry.addViewController("/atguigu").setViewName("success");
}
}
-----------------------------------
原理:
1)、WebMvcAutoConfiguration是SpringMVC的自動配置類
2)、在做其他配置時會導入:@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);
// }
/ }
}
}
3)、容器中所有的WebMvcConfigurer都會一起起作用;
4)、我們的配置類也會被調用;
效果:SpringMVC的自動配置和我們的擴展配置都會起作用。
參考 https://github.com/sheep-cloud/Spring-Boot
沒有留言:
張貼留言