我会什么去设计一个Spring框架?

南风 2020年12月25日 86次浏览

首先,我们应该清楚spring框架的两大特性:

  • IOC(控制反转)Inversion of Control
    控制反转类似于设计模式中依赖倒置的原则,就是类似于需要在代码中创建的对象和对象之间的依赖反交给框架来控制与维护。同时在维护Bean工厂中,每个实例都应该有自己的生命周期和作用域(singleton/、、、)

Bean的生命周期应该是什么样的?

  • AOP(面向切面的编程)Aspect Oriented Programing
    通过动态代理的方式将横切关注点织入面向对象的系统,降低系统的耦合度和提高系统的可扩展性等,常用于事务管理、日志管理、权限管理等场景。
  • DI(依赖注入)Dependency Injection
    将更多的功能对象注入到目标对象,增加系统功能性,降低系统耦合度。构造器注入、setter注入、工厂方法注入。

如何解决循环依赖的问题:Spring为了解决单例的循环依赖问题,使用了三级缓存.Spring原理上无法实现构造器注入解决循环依赖问题,而setter注入原理上可以解决,实际上有循环依赖的问题,说明代码已经有badsmell,应该在代码结构设计上去改变,这也是为什么springboot推荐使用构造器注入的根本原因。

我们的框架应该有哪些设计模式:

  • 1、工厂模式
    管理Bean的BeanFactory,Bean对象管理的集中营

  • 2、代理模式
    使用JDK或者CGLIB实现动态代理,依赖倒置的原则使用对象,降低耦合度和增强扩展性。

  • 3、装饰器模式
    ServletRequestWrapper和SessionRepositoryRequestWrapper对servlet、session进行装饰。

  • 4、模板模式
    适配不同的数据库调用场景。

  • 5、单例模式
    默认所有的spring容器代理的bean都是单例。

  • 6、观察者模式
    spring在事件的监听中使用了观察者模式,当事件变更时通知观察者会通知对应的业务处理人。

同时,我们需要明白的设计模式的六大原则:

  • 开闭原则
    对扩展开饭,对修改关闭,当要实现新的功的时候,我们应该去扩展而不是直接去修改原有的功能代码。

  • 迪米特法则
    又称最少知道原则,接口调用者不应该关心接口的内部实现,体现面向对象的封装特性。

  • 接口隔离原则
    功能应该分开不同的接口实现,使得接口功能划分明确,体现设计模式的单一职责原则。

  • 里氏代换原则
    所有基类可以出现的地方,子类都是应该可以实现。

  • 依赖倒置原则
    针对接口编程,依赖于抽象而不依赖于具体。

  • 合成服用原则
    尽量使用合成/聚合的方式,而不是使用继承。

面向对象的三大基本特性:封装、继承、多态。