Spring 1 概念
- 提供各个层面的选择。Spring 允许您尽可能推迟设计决策。例如,可以通过配置切换持久性提供程序,而无需更改代码。对于许多其他基础架构问题以及与第三方 API 的集成也是如此。
- Ioc
- DI
- POI
框架的一个重要特征是用户定义的用于定制框架的方法通常从框架本身调用,而不是从用户的应用程序代码调用。该框架通常在协调和排序应用程序活动中扮演主要程序的角色。这种控制反转使框架具有作为可扩展骨架的能力。用户提供的方法定制框架中为特定应用程序定义的通用算法。
库本质上是一组可以调用的函数。
框架体现了一些抽象设计,内置了更多行为。为了使用它,您需要通过子类化或插入自己的类将行为插入到框架中的各个位置。然后框架的代码在这些点上调用您的代码。
我将方法的控制权交给了框架系统。然后根据我对框架所做的设定,决定何时调用我的方法。控制被颠倒了 - 它叫我而不是我调用框架。这种现象是控制倒置(也称为好莱坞原则 - “不要打电话给我们,我们会打电话给你”)。
它执行调用,您的代码作出反应 - 所以再次控制被反转。
(个人总结:将 控制反转 称为 反向控制 就容易理解的多了。。。)
Spring所倡导的开发方式就是如此,所有的类都会在spring容器中登记,告诉spring你是个什么东西,你需要什么东西,然后spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由 spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转。
控制的什么被反转了?就是:获得依赖对象的方式反转了。
传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;而反转则是由容器来帮忙创建及注入依赖对象;为何是反转?因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转;哪些方面反转了?依赖对象的获取被反转了。
IoC 的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过 DI(Dependency Injection,依赖注入)来实现的。
DI 是如何实现的呢? Java 1.3之后一个重要特征是反射(reflection),它允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性,spring就是通过反射来实现注入的。
来自:https://www.martinfowler.com/bliki/InversionOfControl.html
控制反转和依赖注入是框架的特性,而 spring 的核心的精神是依赖注入!!!