“SpringBoot:进阶使用”的版本间差异
		
		
		
		
		
		跳到导航
		跳到搜索
		
				
		
		
	
 (建立内容为“category:SpringBoot”的新页面)  | 
				无编辑摘要  | 
				||
| 第1行: | 第1行: | ||
[[category:SpringBoot]]  | [[category:SpringBoot]]  | ||
== SpringBoot的web开发 ==  | |||
Web开发的自动配置类:“org.springframework.boot.autoconfigure.web”包中:“'''WebMvcAutoConfiguration.class'''”类;(SpringMVC的自动配置)  | |||
:[[File:spring-boot:springMVC自动配置.jpg|300px]]  | |||
=== 自动配置:ViewResolver ===  | |||
“WebMvcAutoConfiguration.class”中:(一般不需要自行配置)  | |||
<syntaxhighlight lang="java">  | |||
@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 {  | |||
   ...  | |||
   @Configuration  | |||
	@Import(EnableWebMvcConfiguration.class)  | |||
	@EnableConfigurationProperties({ WebMvcProperties.class, ResourceProperties.class })  | |||
	public static class WebMvcAutoConfigurationAdapter extends WebMvcConfigurerAdapter {  | |||
      ...  | |||
      private final WebMvcProperties mvcProperties;  | |||
      ...  | |||
		@Bean  | |||
		@ConditionalOnMissingBean  | |||
		public InternalResourceViewResolver defaultViewResolver() {  | |||
			InternalResourceViewResolver resolver = new InternalResourceViewResolver();  | |||
			resolver.setPrefix(this.mvcProperties.getView().getPrefix());  | |||
			resolver.setSuffix(this.mvcProperties.getView().getSuffix());  | |||
			return resolver;  | |||
		}  | |||
		@Bean  | |||
		@ConditionalOnBean(View.class)  | |||
		@ConditionalOnMissingBean  | |||
		public BeanNameViewResolver beanNameViewResolver() {  | |||
			BeanNameViewResolver resolver = new BeanNameViewResolver();  | |||
			resolver.setOrder(Ordered.LOWEST_PRECEDENCE - 10);  | |||
			return resolver;  | |||
		}  | |||
      ...  | |||
   }  | |||
   ...  | |||
}  | |||
</syntaxhighlight>  | |||
“WebMvcProperties”(“org.springframework.boot.autoconfigure.web”包中):  | |||
<syntaxhighlight lang="java">  | |||
@ConfigurationProperties(prefix = "spring.mvc")  | |||
public class WebMvcProperties {  | |||
   ...  | |||
   public static class View {  | |||
		/**  | |||
		 * Spring MVC view prefix.  | |||
		 */  | |||
		private String prefix;  | |||
		/**  | |||
		 * Spring MVC view suffix.  | |||
		 */  | |||
		private String suffix;    | |||
      ...  | |||
   }  | |||
}  | |||
</syntaxhighlight>  | |||
=== 自动配置:静态资源位置 ===  | |||
全局变量中配置springMVC解析规则:  | |||
<syntaxhighlight lang="properties">  | |||
server.port=8088  | |||
server.servlet-path=/  | |||
...  | |||
</syntaxhighlight>  | |||
# “/”:Spring Boot的默认静态资源的路径为:“'''spring.resources.static-locations'''=classpath:/resources/”;  | |||
#* 可以指定为“classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/”等;  | |||
#: [[File:SpringBoot:静态文件位置配置.png|600px]]  | |||
# “*.xxx”:(或,不指定静态文件路径时)将静态资源放置到“webapp”下的“static”目录中即可通过地址访问;  | |||
#: [[File:SpringBoot默认静态文件位置.png|200px]]  | |||
=== 自定义消息转化器 ===  | |||
自定义消息转化器:只需要在“@Configuration”注解的类中,添加“@bean”注解的消息转化器方法,就会被Spring Boot自动加入到容器中:  | |||
<syntaxhighlight lang="java">  | |||
@Controller  | |||
@SpringBootApplication(exclude = { RedisAutoConfiguration.class })  | |||
@Configuration  | |||
public class HelloApplication {  | |||
   ...  | |||
   @Bean  | |||
    public StringHttpMessageConverter stringHttpMessageConverter() {  | |||
        StringHttpMessageConverter converter = new StringHttpMessageConverter(Charset.forName("ISO-8859-1"));  | |||
        return converter;  | |||
    }  | |||
    public static void main(String[] args) {  | |||
         SpringApplication.run(HelloApplication.class, args);  | |||
    }  | |||
}  | |||
</syntaxhighlight>  | |||
系统中已有默认配置:(一般不需自行定义)  | |||
* “org.springframework.boot.autoconfigure.web”包中“HttpMessageConvertersAutoConfiguration.class”类;  | |||
<syntaxhighlight lang="java">  | |||
@Configuration  | |||
@ConditionalOnClass(HttpMessageConverter.class)  | |||
@AutoConfigureAfter({ GsonAutoConfiguration.class, JacksonAutoConfiguration.class })  | |||
@Import({ JacksonHttpMessageConvertersConfiguration.class, GsonHttpMessageConvertersConfiguration.class })  | |||
public class HttpMessageConvertersAutoConfiguration {  | |||
   ...  | |||
   @Configuration  | |||
	@ConditionalOnClass(StringHttpMessageConverter.class)  | |||
	@EnableConfigurationProperties(HttpEncodingProperties.class)  | |||
	protected static class StringHttpMessageConverterConfiguration {  | |||
		private final HttpEncodingProperties encodingProperties;  | |||
		protected StringHttpMessageConverterConfiguration(  | |||
				HttpEncodingProperties encodingProperties) {  | |||
			this.encodingProperties = encodingProperties;  | |||
		}  | |||
		@Bean  | |||
		@ConditionalOnMissingBean  | |||
		public StringHttpMessageConverter stringHttpMessageConverter() {  | |||
			StringHttpMessageConverter converter = new StringHttpMessageConverter(  | |||
					this.encodingProperties.getCharset());  | |||
			converter.setWriteAcceptCharset(false);  | |||
			return converter;  | |||
		}  | |||
	}  | |||
}  | |||
</syntaxhighlight>  | |||
=== 重写SpringMVC的配置 ===  | |||
有些时候需要自已配置SpringMVC而不是采用默认;<br/>  | |||
比如说增加一个拦截器,这个时候就得通过继承“WebMvcConfigurerAdapter.class”(“org.springframework.web.servlet.config.annotation”包)然后重写父类中的方法进行扩展:  | |||
<syntaxhighlight lang="java">  | |||
import ...  | |||
@Configuration  | |||
public class MySrpingMVCConfig extends WebMvcConfigurerAdapter{  | |||
    // 自定义拦截器  | |||
    @Override  | |||
    public void addInterceptors(InterceptorRegistry registry) {  | |||
        HandlerInterceptor handlerInterceptor = new HandlerInterceptor() {  | |||
            @Override  | |||
            public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {  | |||
                System.out.println("自定义拦截器............");  | |||
                return true;  | |||
            }  | |||
            @Override  | |||
            public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,  | |||
                    ModelAndView modelAndView) throws Exception {  | |||
            }  | |||
            @Override  | |||
            public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,  | |||
                    Exception ex) throws Exception {  | |||
            }  | |||
        };  | |||
        registry.addInterceptor(handlerInterceptor).addPathPatterns("/**");  | |||
    }  | |||
    // 自定义消息转化器的第二种方法  | |||
    @Override  | |||
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {  | |||
        StringHttpMessageConverter converter  = new StringHttpMessageConverter(Charset.forName("UTF-8"));  | |||
        converters.add(converter);  | |||
    }  | |||
}  | |||
</syntaxhighlight>  | |||
== 整合 ==  | |||
== 整合Mybatis ==  | |||
== 整合Mybatis ==  | |||
== 整合Mybatis ==  | |||
== 整合Mybatis ==  | |||
== 整合Mybatis ==  | |||
2020年11月4日 (三) 04:41的最新版本
SpringBoot的web开发
Web开发的自动配置类:“org.springframework.boot.autoconfigure.web”包中:“WebMvcAutoConfiguration.class”类;(SpringMVC的自动配置)
自动配置:ViewResolver
“WebMvcAutoConfiguration.class”中:(一般不需要自行配置)
@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 {
   ...
   @Configuration
	@Import(EnableWebMvcConfiguration.class)
	@EnableConfigurationProperties({ WebMvcProperties.class, ResourceProperties.class })
	public static class WebMvcAutoConfigurationAdapter extends WebMvcConfigurerAdapter {
      ...
      private final WebMvcProperties mvcProperties;
      ...
		@Bean
		@ConditionalOnMissingBean
		public InternalResourceViewResolver defaultViewResolver() {
			InternalResourceViewResolver resolver = new InternalResourceViewResolver();
			resolver.setPrefix(this.mvcProperties.getView().getPrefix());
			resolver.setSuffix(this.mvcProperties.getView().getSuffix());
			return resolver;
		}
		@Bean
		@ConditionalOnBean(View.class)
		@ConditionalOnMissingBean
		public BeanNameViewResolver beanNameViewResolver() {
			BeanNameViewResolver resolver = new BeanNameViewResolver();
			resolver.setOrder(Ordered.LOWEST_PRECEDENCE - 10);
			return resolver;
		}
      ...
   }
   ...
}
“WebMvcProperties”(“org.springframework.boot.autoconfigure.web”包中):
@ConfigurationProperties(prefix = "spring.mvc")
public class WebMvcProperties {
   ...
   public static class View {
		/**
		 * Spring MVC view prefix.
		 */
		private String prefix;
		/**
		 * Spring MVC view suffix.
		 */
		private String suffix;  
      ...
   }
}
自动配置:静态资源位置
全局变量中配置springMVC解析规则:
server.port=8088
server.servlet-path=/
...
- “/”:Spring Boot的默认静态资源的路径为:“spring.resources.static-locations=classpath:/resources/”;
- 可以指定为“classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/”等;
 
 - “*.xxx”:(或,不指定静态文件路径时)将静态资源放置到“webapp”下的“static”目录中即可通过地址访问;
 
自定义消息转化器
自定义消息转化器:只需要在“@Configuration”注解的类中,添加“@bean”注解的消息转化器方法,就会被Spring Boot自动加入到容器中:
@Controller
@SpringBootApplication(exclude = { RedisAutoConfiguration.class })
@Configuration
public class HelloApplication {
   ...
   @Bean
    public StringHttpMessageConverter stringHttpMessageConverter() {
        StringHttpMessageConverter converter = new StringHttpMessageConverter(Charset.forName("ISO-8859-1"));
        return converter;
    }
    public static void main(String[] args) {
         SpringApplication.run(HelloApplication.class, args);
    }
}
系统中已有默认配置:(一般不需自行定义)
- “org.springframework.boot.autoconfigure.web”包中“HttpMessageConvertersAutoConfiguration.class”类;
 
@Configuration
@ConditionalOnClass(HttpMessageConverter.class)
@AutoConfigureAfter({ GsonAutoConfiguration.class, JacksonAutoConfiguration.class })
@Import({ JacksonHttpMessageConvertersConfiguration.class, GsonHttpMessageConvertersConfiguration.class })
public class HttpMessageConvertersAutoConfiguration {
   ...
   @Configuration
	@ConditionalOnClass(StringHttpMessageConverter.class)
	@EnableConfigurationProperties(HttpEncodingProperties.class)
	protected static class StringHttpMessageConverterConfiguration {
      
		private final HttpEncodingProperties encodingProperties;
		protected StringHttpMessageConverterConfiguration(
				HttpEncodingProperties encodingProperties) {
			this.encodingProperties = encodingProperties;
		}
		@Bean
		@ConditionalOnMissingBean
		public StringHttpMessageConverter stringHttpMessageConverter() {
			StringHttpMessageConverter converter = new StringHttpMessageConverter(
					this.encodingProperties.getCharset());
			converter.setWriteAcceptCharset(false);
			return converter;
		}
	}
}
重写SpringMVC的配置
有些时候需要自已配置SpringMVC而不是采用默认;
比如说增加一个拦截器,这个时候就得通过继承“WebMvcConfigurerAdapter.class”(“org.springframework.web.servlet.config.annotation”包)然后重写父类中的方法进行扩展:
import ...
@Configuration
public class MySrpingMVCConfig extends WebMvcConfigurerAdapter{
    // 自定义拦截器
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        HandlerInterceptor handlerInterceptor = new HandlerInterceptor() {
            @Override
            public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
                System.out.println("自定义拦截器............");
                return true;
            }
            
            @Override
            public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
                    ModelAndView modelAndView) throws Exception {
            }
            
            @Override
            public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
                    Exception ex) throws Exception {
            }
        };
        registry.addInterceptor(handlerInterceptor).addPathPatterns("/**");
    }
    // 自定义消息转化器的第二种方法
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        StringHttpMessageConverter converter  = new StringHttpMessageConverter(Charset.forName("UTF-8"));
        converters.add(converter);
    }
}
