Springboot的自动配置功能

pringboot自动在启动的时候加载了主配置类,而且开启了自动配置功能
@SpringBootApplication:

@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan

@EnableAutoConfiguration:

@Import({AutoConfigurationImportSelector.class})
//利用这个选择器给容器中导入一些组件

将springframework.boot:spring-boot-autoconfigure(antoconfigure的类路径)下的META-INF下的spring-factories中的EnableAutoConfiguration下的类加入spring的IOC容器中。
在这里插入图片描述

作用:使用这些XxxAutoConfiguration类(自动配置类)来实现springboot的自动配置功能

这里以HttpEncodingAutoConfiguration来分析自动配置原理:这个类上面有许多个注解:
HttpEncodingAutoConfiguration.class

@Configuration(proxyBeanMethods = false)//表示这是一个配置类
@EnableConfigurationProperties({ServerProperties.class})//启用指定类的properties功能,就是说可以使用properties文件进行配置,将
配置文件中的值和这个类绑定起来了
@ConditionalOnWebApplication(type = Type.SERVLET)//这是spring的底层@Conditional注解,on后面跟着的是条件,本例中表示如果这是一个
web应用,这个配置类里面的配置就会生效,否则无效。
@ConditionalOnClass({CharacterEncodingFilter.class})//判断文件中有没有这个类(CharacterEncodingFilter.class)
@ConditionalOnProperty(prefix = "server.servlet.encoding",value = {"enabled"},matchIfMissing = true)
//判断配置文件中是否存在这个配置属性(server.servlet.encoding.enabled),后面的话表示:就算不匹配也返回true。
public class HttpEncodingAutoConfiguration {
    private final Encoding properties;//当只有一个有参的构造器的时候就会从配置文件中获取指定的值

    public HttpEncodingAutoConfiguration(ServerProperties properties) {
        this.properties = properties.getServlet().getEncoding();}

ServerProperties.class

@ConfigurationProperties(//从properties文件中获取指定的值
    prefix = "server",
    ignoreUnknownFields = true
)
public class ServerProperties {//这个类中的属性都可以进行配置

小总结:所有在配置文件中所有可以配置的值,都是在Xxxproperties类中封装着。
这些自动配置类是怎么实现自动配置的呢?(重点)
首先根据不同的条件(条件以Conditinal后面跟着的这些)判断当前这个自动配置类是0否生效,一旦配置类生效,这个配置类就会给容器中添加各种组件,这些组件是从对应的Xxxproperties文件中获取的,这些类中的每一个属性都是可以在配置文件中配置的。
精髓:

1)、SpringBoot启动会加载大量的自动配置类
2)、我们看我们需要的功能有没有SpringBoot默认写好的自动配置类;
3)、我们再来看这个自动配置类中到底配置了哪些组件; ( 只要我们要用的组件有,我们就不需要再来配置了)
4)、给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。我们就可以在配置文件中指
定这些属性的值;

怎么知道那些自动配置的类会生效呢?
配置文件中添加配置:debug=true。控制台就会打印自动配置报告

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值