美文网首页
spring-boot----自动加载机制

spring-boot----自动加载机制

作者: 不过意局bugyj | 来源:发表于2019-07-12 21:44 被阅读0次

spring boot 的自动加载机制

视频的第20集仔细的和我们讲了spring boot开启时是如何加载组件的。速度有些快,我是看来四遍才懂的。
接下来先讲下大概。

  1. spring boot在启动时会加载大量形如xxxAutoConfiguration即自动配置类。具体那些类会被加载取决于配置文件中是否有相应的配置。

  2. 这些类是如何根据配置决定是否加载的呢,加载做了什么事?
    我们那HttpEncodingAutoConfiguration类作为例子讲解,看其部分源码:

// 注解其为配置类,当此类被加载,就会将某些组件添加进spring容器中。
@Configuration
// 如果此类被加载,激活xxxProperties类与配置文件的绑定,
// 在spring boot中,配置文件中的每一项都有与之对应的properties类的属性。
// 自动配置类也会使用该类中的属性值来生成组件。
@EnableConfigurationProperties({HttpProperties.class})
// 以下三个@ConditionalXxx就是判断是否加载此类的属性
// 判断是否为web应用,如果其为web应用且classpath中存在CharacterEncodingFilter.class
// 而且还有spring.http.encoding属性配置了且值为enable(matchIfMissing则表示没有也没关系,
// 默认值为true),则就加载。
@ConditionalOnWebApplication(
    type = Type.SERVLET
)
// 比如需要有Aspect类,但没有导入相关依赖,classpath中没有该类,就不加载
@ConditionalOnClass({CharacterEncodingFilter.class})
@ConditionalOnProperty(
    prefix = "spring.http.encoding",
    value = {"enabled"},
    matchIfMissing = true
)
public class HttpEncodingAutoConfiguration {
    private final Encoding properties;

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

    // 添加组件到容器中
    @Bean
    // 如果spring容器中没有这个bean对象的话(conditional扩展注解还有很多!)
    @ConditionalOnMissingBean
    public CharacterEncodingFilter characterEncodingFilter() {
        CharacterEncodingFilter filter = new OrderedCharacterEncodingFilter();
        filter.setEncoding(this.properties.getCharset().name());
        filter.setForceRequestEncoding(this.properties.shouldForce(org.springframework.boot.autoconfigure.http.HttpProperties.Encoding.Type.REQUEST));
        filter.setForceResponseEncoding(this.properties.shouldForce(org.springframework.boot.autoconfigure.http.HttpProperties.Encoding.Type.RESPONSE));
        return filter;
    }
    //...
}

注意,我们可以通过设置 debug=true 来控制程序将自动配置报告打印在控制台中,方便我们查看!

实现自动加载功能的类都存在于spring-boot-starter依赖所依赖的spring-boot-autoconfiguration中。

相关文章

  • spring-boot----自动加载机制

    spring boot 的自动加载机制 视频的第20集仔细的和我们讲了spring boot开启时是如何加载组件的...

  • TP框架之自定义配置

    前提介绍 TP版本为:3.2.3 根据TP配置文件自动加载机制:在自动加载配置文件时,会调用TP的function...

  • php自动加载机制

    说说PHP的autoLoad(http://www.cnblogs.com/yjf512/archive/2012...

  • TP5学习笔记一 自动加载

    ThinkPHP5.0真正实现了按需加载,所有类库采用自动加载机制,并且支持类库映射和composer类库的自动加...

  • Active Record的设计

    自动加载机制 Active Record是Rails的ORM功能实现。上面代码使用了ActiveSupport::...

  • 类加载机制(一)

    加载机制系列类加载机制(一)类加载机制(二)类加载机制(三) 类加载机制 1.JVM把class文件加载到内存,对...

  • PHP面向对象之类的自动加载

    类的自动加载 含义: 当某行代码需要一个类的时候,php的内部机制可以做到“自动加载该类文件”,以满足该行需要一个...

  • Fragment+ViewPager懒加载

      ViewPager的预加载机制,会自动加载左右两边的页面,影响性能,甚至出现卡顿。解决方案如下:

  • PHP的自动加载机制

    什么是自动加载? ​ 顾名思义,就是当我们在使用一个东西的时候,如果这个东西还不存在,于是我们所处的环境就自动...

  • Composer 自动加载(autoload)机制

    自动加载的类型 总体来说 composer 提供了几种自动加载类型 classmap psr-0 psr-4 fi...

网友评论

      本文标题:spring-boot----自动加载机制

      本文链接:https://www.haomeiwen.com/subject/qtrdqctx.html