美文网首页
spring-core

spring-core

作者: 码农崛起 | 来源:发表于2018-05-07 16:05 被阅读0次

    spring最核心的组件是BeanFactory,看了源码才发现,BeanFactory并非定义在spring-core中,那spring-core都有啥东东?

    spring-core主要提供以下服务,为BeanFactory的定义提供基础服务。

    1, ConversionService


    ConversionService.png

    提供可配置的类型转换服务

    Converters.png

    依赖内部的注册表,

    DefaultConversionService.png

    默认支持的类型转换

    查找匹配的Converter


    find-1.png find-2.png

    2, Environment
    PropertySource:任何能提供key-value查找能力的数据源
    MutablePropertySources:PropertySource集合,可动态增删
    profile:bean定义的逻辑分组,一个profile表示一组bean,只有active的profile对应的bean才会注册到bean容器里。
    Environment:继承PropertyResolver,依赖内部的MutablePropertySources提供key查找服务,存储当前active的profile。Environment表示用profile标识的一组key-value,作为其他关联到profile的组件(bean定义)的Context。

    StandardEnvironment.png

    StandardEnvironment默认支持系统属性和系统变量

    profile.png

    如果profile没有显示指定,默认从当前Environment的key值spring.profiles.active获取,逗号分割。

    StandardServletEnvironment.png

    StandardServletEnvironment属性源中额外添加了ServletContext和ServletConfig中的key-value。

    3, Resource
    资源就是一个基于各种协议+特定路径的InputStream


    协议.png

    FileUrlResource:基于文件路径的资源


    FileUrlResource-1.png FileUrlResource-2.png

    ClassPathResource:


    ClassPathResource-1.png ClassPathResource-2.png

    4, 序列化和反序列化


    默认基于jdk的序列化.png 默认基于jdk的反序列化.png

    5, 访问类型元数据:可以不加载类,直接解析字节码,spring boot应用类型推断的基础。


    类元数据.png 类和方法及其注解元数据.png 基于反射.png

    基于反射实现的标准元数据


    基于asm.png

    基于asm直接解析字节码,不需要加载class,这就是打开spring boot源码各种类未定义但是程序可以运行的原因。类在字节码执行过程中遇到了才会加载,使用类的方法首先要有对象,构造对象的任务都委托给了spring的BeanFactory,在spring boot中BeanFactory首先会检查注解中的条件是否满足,指定的类是否可以使用classloader加载,不满足条件的不加载,就算字节码无法编译通过,只要不加载就不会影响程序运行。

    相关文章

      网友评论

          本文标题:spring-core

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