思维导图总结(完结)
Java开发的六大基本原则
1.开闭原则
-
修改时执行关闭原则,扩展时执行开放原则
-
对增加新功能代码时,尽量保证不修改已有代码,然后将扩展的代码增加到项目中
2.里氏代换原则
-
其实就是多态
-
声明方法参数时,尽量使用父类类型代替具体的类型,这样就可以传递这个父类类型的任何子类对象都可以
3.依赖倒转原则
-
面向抽象编程——面向接口编程
-
在声明一个变量时,尽量使用父类类型或接口类型进行声明,而不应该时具体的类型
4.接口隔离原则
-
定义接口时,接口功能尽量单一
5.合成/聚合复用原则
-
尽量使用关联关系代替继承关系达到对象的复用
6.迪米特原则
-
高内聚,低耦合
Spring框架流程
(循环依赖-currentHashMap,Lasy)
-
实例化一个ApplicationContext的对象;
-
调用bean工厂后置处理器完成扫描;
-
循环解析扫描出来的类信息;
-
实例化一个BeanDefinition对象来存储解析出来的信息;
-
把实例化好的beanDefinition对象put到beanDefinitionMap当中缓存起来,以便后面实例化bean;
-
再次调用bean工厂后置处理器;
-
当然spring还会干很多事情,比如国际化,比如注册BeanPostProcessor等等,如果我们只关心如何实例化一个bean的话那么这一步就是spring调用finishBeanFactoryInitialization方法来实例化单例的bean,实例化之前spring要做验证,需要遍历所有扫描出来的类,依次判断这个bean是否Lazy,是否prototype,是否abstract等等;
-
如果验证完成spring在实例化一个bean之前需要推断构造方法,因为spring实例化对象是 通过构造方法反射,故而需要知道用哪个构造方法;
-
推断完构造方法之后spring调用构造方法反射实例化一个对象;注意我这里说的是对象、对象、对象;这个时候对象已经实例化出来了,但是并不是一个完整的bean,最简单的体现是这个时候实例化出来的对象属性是没有注入,所以不是一个完整的bean;
-
spring处理合并后的beanDefinition(合并?是spring当中非常重要的一块内容,后面的文 章我会分析);
-
判断是否需要完成属性注入
-
如果需要完成属性注入,则开始注入属性13、判断bean的类型回调Aware接口
-
判断bean的类型回调Aware接口
-
调用生命周期回调方法
-
如果需要代理则元成代理
-
put到单例池——bean完成——存在apring容路当中
------CSDN韫钰
SpringFramework到此结束!
书山有路勤为径,学海无涯苦作舟!