spring-core 墨蓝 2024-04-19 10:23 50阅读 0赞 spring最核心的组件是BeanFactory,看了源码才发现,BeanFactory并非定义在spring-core中,那spring-core都有啥东东? spring-core主要提供以下服务,为BeanFactory的定义提供基础服务。 1, ConversionService ![在这里插入图片描述][20190917105846374.png] ConversionService.png 提供可配置的类型转换服务 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpa3VucGVuZzY2NTYyMDE_size_16_color_FFFFFF_t_70] Converters.png 依赖内部的注册表, ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpa3VucGVuZzY2NTYyMDE_size_16_color_FFFFFF_t_70 1] DefaultConversionService.png 默认支持的类型转换 查找匹配的Converter ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpa3VucGVuZzY2NTYyMDE_size_16_color_FFFFFF_t_70 2] find-1.png ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpa3VucGVuZzY2NTYyMDE_size_16_color_FFFFFF_t_70 3] 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。 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpa3VucGVuZzY2NTYyMDE_size_16_color_FFFFFF_t_70 4] StandardEnvironment.png StandardEnvironment默认支持系统属性和系统变量 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpa3VucGVuZzY2NTYyMDE_size_16_color_FFFFFF_t_70 5] profile.png 如果profile没有显示指定,默认从当前Environment的key值spring.profiles.active获取,逗号分割。 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpa3VucGVuZzY2NTYyMDE_size_16_color_FFFFFF_t_70 6] StandardServletEnvironment.png StandardServletEnvironment属性源中额外添加了ServletContext和ServletConfig中的key-value。 3, Resource 资源就是一个基于各种协议+特定路径的InputStream ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpa3VucGVuZzY2NTYyMDE_size_16_color_FFFFFF_t_70 7] 协议.png FileUrlResource:基于文件路径的资源 ![在这里插入图片描述][20190917110024956.png] FileUrlResource-1.png ![在这里插入图片描述][20190917110030500.png] FileUrlResource-2.png ClassPathResource: ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpa3VucGVuZzY2NTYyMDE_size_16_color_FFFFFF_t_70 8] ClassPathResource-1.png ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpa3VucGVuZzY2NTYyMDE_size_16_color_FFFFFF_t_70 9] ClassPathResource-2.png 4, 序列化和反序列化 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpa3VucGVuZzY2NTYyMDE_size_16_color_FFFFFF_t_70 10] 默认基于jdk的序列化.png ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpa3VucGVuZzY2NTYyMDE_size_16_color_FFFFFF_t_70 11] 默认基于jdk的反序列化.png 5, 访问类型元数据:可以不加载类,直接解析字节码,spring boot应用类型推断的基础。 ![在这里插入图片描述][20190917110114755.png] 类元数据.png ![在这里插入图片描述][20190917110129510.png] 类和方法及其注解元数据.png ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpa3VucGVuZzY2NTYyMDE_size_16_color_FFFFFF_t_70 12] 基于反射.png 基于反射实现的标准元数据 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpa3VucGVuZzY2NTYyMDE_size_16_color_FFFFFF_t_70 13] 基于asm.png 基于asm直接解析字节码,不需要加载class,这就是打开spring boot源码各种类未定义但是程序可以运行的原因。类在字节码执行过程中遇到了才会加载,使用类的方法首先要有对象,构造对象的任务都委托给了spring的BeanFactory,在spring boot中BeanFactory首先会检查注解中的条件是否满足,指定的类是否可以使用classloader加载,不满足条件的不加载,就算字节码无法编译通过,只要不加载就不会影响程序运行。 [20190917105846374.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/18/1f77c1a4681a4334980e80f0be6545e1.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpa3VucGVuZzY2NTYyMDE_size_16_color_FFFFFF_t_70]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/18/6236c4794ba442429f398f7c566444f9.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpa3VucGVuZzY2NTYyMDE_size_16_color_FFFFFF_t_70 1]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/18/c3e60692b84b4d3db2ecb8d4817e6ef0.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpa3VucGVuZzY2NTYyMDE_size_16_color_FFFFFF_t_70 2]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/18/18dd6ec052304b4a96a9c309a90e63f8.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpa3VucGVuZzY2NTYyMDE_size_16_color_FFFFFF_t_70 3]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/18/a79697222c314d5a91982d67d6d80cd7.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpa3VucGVuZzY2NTYyMDE_size_16_color_FFFFFF_t_70 4]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/18/4e652974c27445cdb19fb541e3b8ca1d.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpa3VucGVuZzY2NTYyMDE_size_16_color_FFFFFF_t_70 5]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/18/f5656549a09144b0ab31dd4e1642a294.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpa3VucGVuZzY2NTYyMDE_size_16_color_FFFFFF_t_70 6]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/18/7a855f21d7f9405ab0abc59c50d823af.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpa3VucGVuZzY2NTYyMDE_size_16_color_FFFFFF_t_70 7]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/18/9bcf29195f1742b8a70758d0b97fa3d3.png [20190917110024956.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/18/f6a8e2ce49a44a4ca4da11c713a4335e.png [20190917110030500.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/18/192ae34358ae44e3afdd9b21d09e92c9.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpa3VucGVuZzY2NTYyMDE_size_16_color_FFFFFF_t_70 8]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/18/bea6bc47e3b44c1b83c279e671f5ef0c.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpa3VucGVuZzY2NTYyMDE_size_16_color_FFFFFF_t_70 9]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/18/e4a4e99fcb2849c188fdae4554f686f9.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpa3VucGVuZzY2NTYyMDE_size_16_color_FFFFFF_t_70 10]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/18/bc7d3733c9bd4577841f70b2e78f61eb.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpa3VucGVuZzY2NTYyMDE_size_16_color_FFFFFF_t_70 11]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/18/81add97079da4172adfebfbba27e347e.png [20190917110114755.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/18/e28b3e99fc5544b8ae327219901b2592.png [20190917110129510.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/18/543d09144f8a43cfb1a383562116c518.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpa3VucGVuZzY2NTYyMDE_size_16_color_FFFFFF_t_70 12]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/18/19c2beecd4304d379d97e4c82b8feef3.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpa3VucGVuZzY2NTYyMDE_size_16_color_FFFFFF_t_70 13]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/18/0fbf6656074742fa96e243a709877028.png
相关 Spring(1)之 (1.1_SpringCore )Spring框架的核心 1. Spring框架的核心 Bean对象创建的细节: 对象创建的个数?对象创建的时机? 1. 对象创建:单例和多例(bean中添加 scope属性) scop 超、凢脫俗/ 2022年04月17日 04:58/ 0 赞/ 239 阅读
还没有评论,来说两句吧...