前言

Spring经过漫长的发展,已经成为一站式JavaEE开发框架。Spring的核心功能是DI(IoC)、AOP,Spring的使命是简化Java开发,Spring简化的策略:

  • 基于POJO的轻量级最小侵入性编码
  • 通过DI和面向接口实现松耦合
  • 基于AOP的惯例进行声明式编程
  • 通过AOP和模板减少样板式代码

Tip 耦合具有两面性,耦合太强的代码会出现测试困难,打地鼠式的bug场景;完全没有耦合的代码无法实现功能,因此需要适当耦合。

IoC / DI

Inverse of Control 控制反转,是AOP、声明式事务的基础。什么控制被反转?
对于软件来说,即某一接口具体实现类的选择控制权从调用类中移除、转交给第三方决定,由Spring容器通过Bean的配置来进行控制。这样介绍仍然不够浅显易懂,Martin Fowler提出了DI(Dependency Injection)依赖注入的概念来代替IoC,即让调用类对某一接口实现类的依赖关系由第三方(容器或者协作类)注入,以移除调用类对某一接口实现类的依赖。

https://github.com/spring-projects/spring-framework