ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

11.自动配置原理入门-自动配置流程-场景

2022-09-04 01:01:22  阅读:132  来源: 互联网

标签:11 容器 multipartResolver 配置 MultipartResolver 自动 组件


简单分析一下场景中的自动配置的流程

就拿springboot-autoconfiguration中的web场景来简单分析

进入web的servlet中的DispatcherServletAutoConfiguration 

 

 

 

第一个是优先级不影响自动配置

第二个是是否单例,前端控制器不是单例的,因为是做请求分发的自然不能是单例的,也不影响自动配置

第三个是条件判断 在源码中有标这个的意思,意思就是只有基于 servlet 的 Web 应用程序会匹配。条件成立

第四个是条件判断 是否存在这个类,没用爆红就说明存在

 

 

 第五个是自动配置在之后,不是条件判断所以不影响

那么这个自动配置就会生效,但是也得看看类中还有没有条件判断

比如在自动配置类中还有一个配置类

 

 

 没爆红就证明存在,那么这个类就能继续,然后就注册组件

 

 

 在注册组件的时候也有条件判断的,比如这个

第一个先判断有没有这个类,没爆红就是存在

第二个是容器中没有 MULTIPART_RESOLVER_BEAN_NAME = "multipartResolver"; 没有multipartResolver这个组件 条件成立

意思就是说有multipartResolver组件 就不走这里,没有multipartResolver组件才会走这里

没有multipartResolver会生效 但是在方法中又在取这个 multipartResolver的参数,就说明容器中存在multipartResolver的组件,不然下方返回null了

容器中存在multipartResolver,然后又返回了一个名为multipartResolver的组件,就可以看出从容器中取出的multipartResolver组件名字不对

其实通过里面的注释就可以看出这是一个   如果命名错误,就重新注册了名为multipartResolver的组件

下面的老师的总结:

        @Bean
        @ConditionalOnBean(MultipartResolver.class)  //容器中有这个类型组件
        @ConditionalOnMissingBean(name = DispatcherServlet.MULTIPART_RESOLVER_BEAN_NAME) //容器中没有这个名字 multipartResolver 的组件
        public MultipartResolver multipartResolver(MultipartResolver resolver) {
            //给@Bean标注的方法传入了对象参数,这个参数的值就会从容器中找。
            //SpringMVC multipartResolver。防止有些用户配置的文件上传解析器不符合规范
            // Detect if the user has created a MultipartResolver but named it incorrectly
            return resolver;
        }
给容器中加入了文件上传解析器;

SpringBoot默认会在底层配好所有的组件。但是如果用户自己配置了以用户的优先

@Bean
    @ConditionalOnMissingBean
    public CharacterEncodingFilter characterEncodingFilter() {
    }

这个是编码过滤器,就是请求过来之后转换编码,上面整体的意思是 我们自己也可以在自己的配置类中定义bean

比如public class myconfig{

    public CharacterEncodingFilter characterEncodingFilter() {
    ... }

}

总结:

  • SpringBoot先加载所有的自动配置类 xxxxxAutoConfiguration
  • 每个自动配置类按照条件进行生效,默认都会绑定配置文件指定的值。xxxxProperties里面拿。xxxProperties和配置文件进行了绑定
  • 生效的配置类就会给容器中装配很多组件
  • 只要容器中有这些组件,相当于这些功能就有了
  • 定制化配置
    • 用户直接自己@Bean替换底层的组件
    • 用户去看这个组件是获取的配置文件什么值就去修改。

xxxxxAutoConfiguration ---> 组件 ---> xxxxProperties里面拿值 ----> application.properties

 xxxxProperties里面拿值拿的是默认值,我们在application.properties中写的配置就是重写的

 

标签:11,容器,multipartResolver,配置,MultipartResolver,自动,组件
来源: https://www.cnblogs.com/dzs894330350/p/16654099.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有