2021心得4

前面经历了三次计划

  • 2021100:战线太长,鸽了38%
  • 202110:小有所获,不系统
  • 202113:初见端倪,有所成效

这一次计划,有会有什么收获呢?

今天也2021年7月1号了,2021年过了一半了,很开心能在这个时间点打开日志,记录着这些,应为赶上好时候了,这正是新生好日子!

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天,牛逼!

202110心得


1
2
3
while(2021年5月25日往后的10天) {
读书 > 笔记[typora] > 发表心得[hexo] > 准备好第二天想看的[typora]
}

day 1

把书翻了出来,半天没找到,原来是垫显示器打游戏去了。。。。。。
然后简单看了下前沿,找了下感觉,似乎闻到了知识的香气,就说1点了要睡觉了!

day 2

依赖倒置原理、依赖反转模式、依赖注入。。。

day 3

IoC容器的实现组成:资源Resource(好比水)、容器BeanFactory(好比提桶跑路)、容器ApplicationContext(好比提保温桶跑路)

day 4

BeanDefinition资源的定位(好比找水)、读取(好比挖水)和注册(好比吧水装进桶)过程是分开进行的。

day 5

找水:FileSystemXmlApplicationContext的构造函数调用refresh -> AbstractRefreshableApplicationContext对容器进行初始化
初始化包括销毁和创建过程,并按照集合(是、否)、类型(classpath、url..)的维度进行了处理。

day 6

打水:简单看了下打水过程,主要是围绕BeanDefinition的解析

day 7

打水:感觉看着很枯燥,然后就想要换一种方式,遂看了看知乎怎么看技术类书籍,说要带着问题去找答案,可是问题很多感觉没有头绪呢?
遂又想到是否要通过画图的方式帮助梳理知识?就去了在线画图网站。咦?结果发现这个网站上有别人梳理过的图额,就直接打开看了。
遂又想到是否可以通过这些图直接看看源码?结果一试,这种对着流程看源码的方式感觉还行,至少直接通过看书理解得更轻松更有层次了,8错8错。

day 8

打水:照着图跟到看了一下便IoC打水的过程,混了个脸熟

day 9

照着书上的模板方法getResourceByPath调用关系图,用IDEA在工程里往上游走找到refresh()。发现还能这样玩,怪不得人与人之间的差距比人与狗的差距还大!
记几个几天看到的idea-mac快捷键:

  • 类层次结构:control + h 可用于查看所有父类
  • 方法层级结构:control + option + h 可用于查看指定方法调用和被调用关系
    (PS:这里有一个坑,就是如果idea没加载到源码jar包就不会被以上结构搜索统计到。。。解决方法是点那个Download下载源码jar包!)

day 10

十天已到,完结喜悦
回看这十天,从最初的书都找不到,到最后的小有所获,还是挺意外的。
看来,坚持还是有意义的,至少给了所谓的希望。

咳咳。。。矫情了。。

那么,十天不长也不短,挺合适的,所以打算下一个计划也订个十天左右。
首先还是来个小目标吧?不然挺没劲的?

下个计划:实现一个自己的IoC容器?
首先要把书上IoC的内容看光吧,也不细看,否则强行细看效果也不好,一共剩56页,至少要看5、6天了:

  • 第一天通读一遍可以找找关键字:KeyWords
  • 第二天看书找问题:Problem
  • 第三天继续看书找问题:Problem
  • 第四天尝试通过网页搜索答案:Answer
  • 第五天尝试在在书里面找答案:Answer
  • 第六天尝试解决剩余疑难问题:Answer

然后还是要有个方案哦,无脑瞎写容易走远哦。。

  • 第七天设计自己的实现方案:Plan
  • 第八天完善自己的实现方案:Plan
  • 第九天尝试添加必要图如类图:Plan

搭个架子的时间还是给充分

  • 第十天开始搭一个项目架子:Code

单侧搞起走

  • 第十一天开始写测试案例:Code

剩下的其实就很简单了。。

  • 第十二天开始写代码咯:Code

回顾哈

  • 第十三天基本结束了,小结:Done

2021100鸽21~36

016 2021-03-23

015 2021-03-24

014 2021-03-25

013 2021-03-26

012 2021-03-27

011 2021-03-28

010 2021-03-29

009 2021-03-30

008 2021-03-31

007 2021-04-01

006 2021-04-02

005 2021-04-03

> 004 2021-04-04

> 003 2021-04-05

> 002 2021-04-06

> 001 2021-04-07

> 000 2021-04-08