SpringBoot 开局篇

SpringBoot

SpringBoot 是什么

 SpringBoot 是为了简化配置文件开发的一种解决方案
 SpringBoot 遵从 规范大于配置
 SpringBoot 内置传统 Spring 能够整合的所有框架的配置文件,所以项目可以独立运行,无需依赖外部的 Servlet 容器

SpringBoot 能干什么

 内置了框架的配置文件,在进行框架整合的时候不需要写 或者 写很少的配置就能完成一个框架的整合功能
 备注:SpringBOot 中的所有框架的配置文件都是通过 Java 代码来编写的

SpringBoot 开发模式的写法

###

SpringBoot 如何实现自动配置(源码分析)

疑问:在 SpringBoot 启动的同时是否将 SpringBoot 内置的上百个框架都给配置了呢?

 在 SpringBoot 启动的时候,他会去读取一个清单文件,清单文件中表明了所有的自动配置类
 然后通过自动配置类中的 条件注解 进行判断当前配置是否 使能,若 使能,则配置,否则不配置;
 使能的条件则是通过 条件注解 去判断

SpringBoot 的全局配置

 全局参数使用场景:
 1、整合数据库,配置数据库链接的四要素
 2、整合 Redis,主机,端口,密码
 3、整合 SpringMVC, 前端传递参数的格式
 4、服务端口 .....

全局配置在创建项目时便默认在 resources 目录下 application.properties

eg:

 # 给 SpringBoot 项目取个名字
 spring.application.name=lgl
 
 # 给服务设置端口
 server.port=9999
 
 # 设置 banner 的路径
 spring.banner.location=classpath:banner.txt
 
 # 设置 banner 图片
     # 图片地址
 spring.banner.image.location=classpath:banner.jpg
     # 图片 宽 高
 spring.banner.image.height=76
 spring.banner.image.width=76
     # 图片边幅
 spring.banner.image.margin=2
 # 图片反转
 spring.banner.image.invert=true
 
 # 给指定包设置日志级别
 logging.level.org.itword.study=info
 
 # 设置 SpringMVC 相关参数
 spring.mvc.date-format=yyyy-MM-dd HH:mm:ss.SSS
 
 # Elasticsearch
 spring.data.elasticsearch.cluster-name=elasticsearch
 # Comma-separated list of cluster node addresses. If not specified, starts a client node.
 spring.data.elasticsearch.cluster-nodes=
 # Additional properties used to configure the client.
 spring.data.elasticsearch.properties.*=
 # Enable Elasticsearch repositories.
 spring.data.elasticsearch.repositories.enabled=true

SpringBoot 中的 Starter POM 问题

Starter POM 是啥?

在 SpringBoot 中为了简化开发配置,需要导入使用场景,导入后就能够导入该场景下的所有包,以此实现自动配置

SpringBoot 的使用场景有哪些?

image-20220329232742561

image-20220329232754850

image-20220329232801300

 

SpringBoot 中常规的 MVC 配置

拦截器配置

  • 拦截器类

     @Component
     public class AuthenticationInterceptor implements HandlerInterceptor {
     
         private final Logger logger = LoggerFactory.getLogger(AuthenticationInterceptor.class);
         /**
          * 用来拦截
          * @param request
          * @param response
          * @param handler
          * @return false 表示拦截,true 表示不拦截
          * @throws Exception
          */
         @Override
         public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
             logger.info("----------------------接收请求,开始拦截----------------------");
             return true;
        }
     
     }

     

  • 添加拦截器

     @Configuration
     public class WebMvcConfig extends WebMvcConfigurationSupport {
     
         @Autowired
         private AuthenticationInterceptor interceptor;
     
         /**
          * 添加拦截器
          * @param registry
          */
         @Override
         protected void addInterceptors(InterceptorRegistry registry) {
             registry.addInterceptor(interceptor);
             super.addInterceptors(registry);
        }
     }

     

过滤器配置

消息转换器配置

  1. 第一种方式

     @Configuration
     @ComponentScan(basePackages = "org.itword.study")
     public class AppConfig {
     
         /**
          * 配置 SpringMVC 消息转换器
          * 若配置类中没有配置该条件则使用场景内的默认配置;若配置类中存在该实体配置 bean ,则读取自定义配置 bean,场景内的默认 bean 就不生效
          * @return
          */
         @Bean
         public FastJsonHttpMessageConverter fastJsonHttpMessageConverter(){
             FastJsonHttpMessageConverter fastJson = new FastJsonHttpMessageConverter();
             fastJson.setDefaultCharset(Charset.forName("UTF-8"));
             return fastJson;
        }
     
         /**
          * 如果返回的是字符串,则使用该消息转换器来配置
          * @return
          */
         @Bean
         public StringHttpMessageConverter stringHttpMessageConverter (){
             StringHttpMessageConverter stringJson = new StringHttpMessageConverter(Charset.defaultCharset());
             return stringJson;
        }
     
     }

     

  2. 第二种方式

     @Configuration
     public class WebMvcConfig extends WebMvcConfigurationSupport {
     
         @Override
         protected void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
             FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
             fastJsonHttpMessageConverter.setDefaultCharset(Charset.forName("ISO-8859-1"));
     
             StringHttpMessageConverter stringMessageConverter = new StringHttpMessageConverter();
             stringMessageConverter.setDefaultCharset(Charset.forName("ISO-8859-1"));
     
             converters.add(fastJsonHttpMessageConverter);
             converters.add(stringMessageConverter);
     
             super.configureMessageConverters(converters);
        }
     }

     

     

  3.