202113心得

13天计划:实现一个自己的IoC容器?

day 1

翻完了56页,居然。而且感觉还行?挺有乘次的?

day 2

问题:

  1. 【概念】IoC容器和依赖反转模式的关系?
  2. 【概念】IoC的应用场景是什么?
  3. BeanFactory是什么,作用是什么?
  4. ApplicationContext是什么,作用是什么?
  5. IoC容器运行的全过程,以及子过程?
  6. BeanDefinition是什么,作用是什么?
  7. BeanFactory是什么,作用是什么?
  8. FactoryBean和BeanFactory的区别是什么?
  9. 加载的资源如何定位?
  10. 容器Bean如何载入?
  11. 容器Bean如何解析?
  12. 容器Bean如何注册?
  13. 依赖注入的过程?
  14. 常用的@Autowried注解是如何工作的?
  15. 容器自身的生命周期是什么?
  16. BeanPostProcessor是什么,作用是什么?
  17. Bean的依赖检查是什么,作用是什么?
  18. Bean对IoC容器的感知是什么,作用是什么?

day 3

问题:

  1. 问题是今天没看进去?

day 4

一些其他的问题:

  1. 发现总是不能按时的完成任务?时间总是有限的,内容总是无限的。为了保障质量和完成度,首先要做的当然是制定合适的计划,另外就是要注意在做的时候要注意任务的边界了,不能一味的贪全了,这一点是我所很缺乏的。
  2. 发现老是会把时间浪费很大一部分?比如挑一个合适的工具、找一个VPN好上谷歌和维基百科、找一个临时想起的早期的资料等等。找到最后时间也没了。其实工具真的总要吗?或者说真的必要吗?答案是,工具真的很重要。。但是在输入阶段真的没那么重要。输入阶段可能会做笔记,这个就是怎么快怎么来了,怎么方便怎么来了,而不是怎么完善规整怎么来,这还是和第一点一样,勿要贪完美,至少延迟完美。

对了,今天还思考了一个知行合一的学习框架,感觉在学习掌握技术知识方面还是有一定指导意义的?
截屏2021-06-10 上午12.13.46

day 5

看了下这些问题

  • 【概念】IoC容器和依赖反转模式的关系?:IoC容器就是一个依赖反转模式的一个具体框架实现。

  • IoC、DI、DIP三者的关系?:IoC(Inversion of Control)控制反转,是面向对象编程中一种设计原则(或设计模式),旨在降低代码之间的耦合度。在Spring中,IoC设计原则具体被现为了一种容器框架,框架本身实现了DI(Dependency Injection),依赖注入对象的能力。在程序运行时表现为,被依赖的对象在被创建时,是由一个第三方框架即IoC容器框架提供给它,而不是通过new的方式自己去创建。故可以说,依赖对象的获得被反转了,IoC容器框架便通过这种控制反转的方式,降低了代码耦合度。IoC和DI的关系是,IoC是抽象的定义,DI是具体的实现,一个宽泛,一个具体。DIP(Dependency inversion principle)依赖反转原则,则是更为抽象的存在!他妈的,搁这里比谁更抽象呢?

  • 【概念】IoC的应用场景是什么?:在框架维度上来说就是Spring IoC控制反转框架。在容器框架里实现分为BeanFacotry基本容器和ApplicationContext应用两个层面。

  • BeanFactory是什么,作用是什么?:BeanFactory定义了IoC容器的最基本形式

  • ApplicationContext是什么,作用是什么?:ApplicationContext是IoC容器的高级表现形式
  • IoC容器运行的全过程,以及子过程?BeanDefinition资源的定位->BeanDefinition的读取(载入和解析)->BeanDefinition在IoC容器中注册->IoC容器的依赖注入
  • BeanDefinition是什么,作用是什么?BeanDefinition就是用于定义容器中Bean信息的一个类吧,比如配置Bea的名称、类路径、init-lazy、类型(singleton、prototype)
  • FactoryBean是什么,作用是什么?FactoryBean是一个能产生或修饰对象生成的工厂Bean
  • FactoryBean和BeanFactory的区别是什么?BeanFactory:负责生产和管理Bean的一个工厂接口,提供一个Spring Ioc容器规范;FactoryBean: 一种Bean创建的一种方式,对Bean的一种扩展。对于复杂的Bean对象初始化创建使用其可封装对象的创建细节。
  • 加载的资源如何定位?由不同的实现定位不同资源,主要方法是getResourceByPath

day 6

问题还没答完,想要去理解就得看东西。

看书呢,东西太多,看网上呢,资料少而且坑。

还是自己摸索下靠谱。所以今天就又看了下IoC注入的整个流程:

截屏2021-06-15 下午11.40.32

细节一大堆还没看哦,这里就列了下主流程,但是也算一点眉目。

感觉更需要、和必要投入的事还有很多,一点点来吧。

day 7

先来两张图:

FileSystemXmlApplicationContext

DefaultListableBeanFactory

再来一个宝藏,刚看了一集,发现和我这个13天计划非常契合,针不戳:

https://www.bilibili.com/video/BV1dK4y127mH?from=search&seid=17125273885717716928

day 8

鸽了

day 9

鸽了

day 10

鸽了

day 11

  • 容器Bean如何载入?以AbstractApplicationContext的refresh方法作为入口,配合其子类完成资源的定位、刷新、加载BeanDefinition为文档
  • 容器Bean如何解析?通过BeanDefinitionParserDelegate+DefaultBeanDefinitionDocumentReader去解析BeanDefinition
  • 容器Bean如何注册?通过BeanDefinitionReaderUtils工具将BeanDefinition注册到DefaultListableBeanFactory容器中

day 12

day 13

搭建项目shibaframework柴柴框架用于研究springframework
柴柴logo

day 14

day 15

早点作手,实现最基础的类扫描

day 16

  • 搭建核心模块
  • 实现最基础的类扫描

day 17

  • 实现最基本的BeanDefinition注册&Bean获取

去年的今天,开始了这份工作,满打满算有一年了。
起初来这里,是看上了这里的稳定、不错的薪水、以及相对规范的开发模式。
中途还发现一个优点:饭很好干!
说起来,我还不算讨厌这里,还有点喜欢?
从刚进来的是候的打鸡血,想要把所有东西都学到。
到现在的习惯,时不时的散漫,不能说是松懈吧,但是真的是习惯了,所以现在感觉有点混了。
这一年接触的新东西还是蛮多的,什么邮件、wiki系统、详细设计、月度发版、JIRA任务
什么gitExt、CI/DI、Sonar、单元测试
什么服务化接口、paas容器、微服务、统一认证
说起来害挺新鲜的
不过也有一些不爽的
什么增量发布、策略、应急方案
测试、正式补丁、线上线下各种会议
代码提交一人一版一文件的限制、各种人工检查和保障
总结就是由于开发大环境的限制(追求稳妥),导致很多好的实践无法完全实现,比如全量发布
太晚了,就此打住

day 18

  • 实现最基本的自动注入(实现中)

day 19

day 20

  • 实现最基本的自动注入

day 21

day 22

  • 实现BeanNameAware

day 23

day 24

  • 实现BeanPostProcessor(开始单一测试模式)

day 25

  • 实现最基本的AOP

回答一下day2的问题

  1. IoC容器和依赖反转模式的关系?IoC容器就是一个依赖反转模式的一个具体框架实现。
  2. IoC的应用场景是什么?IoC(Inversion of Control)控制反转,是面向对象编程中一种设计原则(或设计模式),旨在降低代码之间的耦合度。在Spring中,IoC设计原则具体被现为了一种容器框架,框架本身实现了DI(Dependency Injection),依赖注入对象的能力。在程序运行时表现为,被依赖的对象在被创建时,是由一个第三方框架即IoC容器框架提供给它,而不是通过new的方式自己去创建。故可以说,依赖对象的获得被反转了,IoC容器框架便通过这种控制反转的方式,降低了代码耦合度。IoC和DI的关系是,IoC是抽象的定义,DI是具体的实现,一个宽泛,一个具体。DIP(Dependency inversion principle)依赖反转原则,则是更为抽象的存在!他妈的,搁这里比谁更抽象呢?
  3. BeanFactory是什么,作用是什么?BeanFactory定义了IoC容器的最基本形式
  4. ApplicationContext是什么,作用是什么?:ApplicationContext是IoC容器的高级表现形式
  5. IoC容器运行的全过程,以及子过程?BeanDefinition资源的定位->BeanDefinition的读取(载入和解析)->BeanDefinition在IoC容器中注册->IoC容器的依赖注入
  6. BeanDefinition是什么,作用是什么?BeanDefinition就是用于定义容器中Bean信息的一个类吧,比如配置Bea的名称、类路径、init-lazy、类型(singleton、prototype)
  7. FactoryBean是什么,作用是什么?FactoryBean是一个能产生或修饰对象生成的工厂Bean
  8. FactoryBean和BeanFactory的区别是什么?BeanFactory:负责生产和管理Bean的一个工厂接口,提供一个Spring Ioc容器规范;FactoryBean: 一种Bean创建的一种方式,对Bean的一种扩展。对于复杂的Bean对象初始化创建使用其可封装对象的创建细节。
  9. 加载的资源如何定位?由不同的实现定位不同资源,主要方法是getResourceByPath
  10. 容器Bean如何载入?以AbstractApplicationContext的refresh方法作为入口,配合其子类完成资源的定位、刷新、加载BeanDefinition为文档
  11. 容器Bean如何解析?通过BeanDefinitionParserDelegate+DefaultBeanDefinitionDocumentReader去解析BeanDefinition
  12. 容器Bean如何注册?通过BeanDefinitionReaderUtils工具将BeanDefinition注册到DefaultListableBeanFactory容器中
  13. 依赖注入的过程?使用反射识别和设置从容器中获得的对象
  14. 常用的@Autowried注解是如何工作的?雷同13
  15. 容器自身的生命周期是什么?[TODO]
  16. BeanPostProcessor是什么,作用是什么?实现深度自定义初始化Bean,可自定义创建前和创建后的动作
  17. Bean的依赖检查是什么,作用是什么?[TODO]
  18. Bean对IoC容器的感知是什么,作用是什么?[TODO]

其他问题:
19:IoC、DI、DIP三者的关系?:IoC(Inversion of Control)控制反转,是面向对象编程中一种设计原则(或设计模式),旨在降低代码之间的耦合度。在Spring中,IoC设计原则具体被现为了一种容器框架,框架本身实现了DI(Dependency Injection),依赖注入对象的能力。在程序运行时表现为,被依赖的对象在被创建时,是由一个第三方框架即IoC容器框架提供给它,而不是通过new的方式自己去创建。故可以说,依赖对象的获得被反转了,IoC容器框架便通过这种控制反转的方式,降低了代码耦合度。IoC和DI的关系是,IoC是抽象的定义,DI是具体的实现,一个宽泛,一个具体。DIP(Dependency inversion principle)依赖反转原则,则是更为抽象的存在!他妈的,搁这里比谁更抽象呢?

来看看计划:

实现一个自己的IoC容器?框架基本实现,计划13天实际用了25天,牛逼!