SpringBoot自动装配原理

自动装配原理:

1):springboot启动时加载主配置类,其中@EnableAutoConfiguration开启自动装配功能



2):@EnableAutoConfiguration作用:


@EnableAutoConfiguration

              1>:利用@Import导入了 AutoConfigurationImportSelector.class类,使用这个类给容器导入装配的组件;

              2>:其中的selectImports方法的内容:

                        List configurations =this.getCandidateConfigurations(annotationMetadata, attributes);   获取候选配置

                                loadFactoryNames方法中扫描所有jar包的路径


jar包路径

把扫描到的文件内容包装成propertier对象 --我们配置的配置文件内容最后也会成功propertier对象

从properties中获取到所有EnableAutoConfiguration.class类(对应得值),然后把他们加载到容器中

包装成properies对象


类路径下的AutoConfiguration配置

将类路径  :META-INF/spring.factories里面配置的所有EnableAutoConfiguration的值加入到容器中:


3):每一个自动配置类的功能



4):以HttpEncodingAutoConfiguration为例解释自动配置原理:


HttpEncodingAutoConfiguration类

                    --@Configuration    :  表示这是一个配置类,以前编写的配置文件一个样,给容器中添加组件

                    -- @EnableConfigurationProperties   :启动指定类的configurationProperties功能;将配置文件中对应得值与ServerProperties绑定起来;

                    --@ConditionalOnWebApplication   :  spring底层@Conditional注解,根据不同的条件,如果满足指定的条件。整个配置类里面的配置生效;判断应用是否web应用,如果是当前配置类生效

                    -- @ConditionalOnClass   : 判断当前项目有没有这个类   CharacterEncodingFilter.class是springMvc中乱码过滤器

                    --@ConditionalOnProperty   :  判断配置文件中是否存在某个配置prefix ="server.servlet.encoding",,   不存在则enabled,默认存在

                    太踏马帅了~~~~~~~~~~


HttpEncodingAutoConfiguration 方法

                    --@Bean   :  给容器添加一个组件   ; 其中this.properies。get值表示某些之需要从properies文件中获取

                                    private final Encoding properties;  表示  this.properies已经和properies文件映射了

                                     重写构造方法,properies中参数的值从容器中获取

                                    public HttpEncodingAutoConfiguration(ServerProperties properties) {

                                                this.properties = properties.getServlet().getEncoding();

                                         }

根据当前不同的条件判断,决定这个配置类是否生效?

5):配置文件中能配置的属性都是对应XXXXproperies的封装着;配置文件能配置什么就可以参照某个功能对应的这个属性类

                    

精髓:

    1):SpringBoot启动会加载大量的自动配置类

     2):我们看我们需要的功能有没有SpringBoot默认写的自动配置类;

     3):我们在来看这个自动配置类中到底配置那些组件;(只要我们要用的组件有,我们就不要再来配置了

     4):给容器中自动配置类添加组件的时候,会从properties类中获取某些属性,我们就可以在配置文件中指定这些属性的值

     xxxAutoConfiguration:自动配置类;  给容器中添加组件

     xxxxProperties  :封装配置文件中的相关属性;

                    

你可能感兴趣的:(SpringBoot自动装配原理)