目录
1.Spring是什么
我们通常所说的 Spring 指的是 Spring Framework(Spring 框架),它是一个开源框架,有着活跃而庞大的社区,这就是它之所以能长久不衰的原因。Spring 支持广泛的应用场景,它可以让 Java 企业级的应用程序开发起来更简单。
用一句简单的话来说:Spring是包含众多方法工具的loc容器!
2.lOC/DI
IoC (Inversion of Control) 即控制反转,是面向对象设计的一种原则,主要是通过第三方容器,对Bean对象进行统一管理,和组织对象之间的依赖关系。获得依赖对象过程,由原本程序自己控制转变为loc容器主动注入(由程序自己控制--- > 容器控制),控制权发生了转变,所以称为控制反转。
DI是实现lOC的方式之一,依赖注入,就是在lOC容器运行期间,动态的将某种依赖注入到对象中
控制反转和依赖注入就是通过不同的角度来描述同一件事情,就是指通过引入loc容器,利用依赖注入的方式,进行对象间的解耦。
实现方式
DI是lOC实现的方式之一,DI的实现方式有两种:属性注入和构造注入
实现原理
主要依赖反射和ASM字节码框架实现(字节码框架操作字节码更加的高效,功能更加强大)。
lOC在代码中的应用理解
例如,我们制造一辆汽车,首先有个车身,车身的制造少不了底盘,底盘又由轮胎还有其他的器件组成,所以就构成这种关系:
传统的开发就是所有的东西都是依赖最底层,大众的需求各不相同,所以加入轮胎改变之后,上层所有的代码都要改变。
那么在lOC的思想基础下去制造一辆汽车,改为注入传递的方式来实现,此时各个模块之间都是相互独立的,使用依赖注入的方式,如果要改变某个属性或者其他,只单独修改部分即可,不会涉及到全部代码。
所以当控制权发生反转之后,不再是上级对象创建并控制下级对象,而是把下级对象注入到上级,下级的控制权不再是上级,这样及时下级发生改变,也不会影响上级。
3.lOC容器的理解
spring容器主要是对lOC模式设计的实现,主要是用容器统一管理Bean对象和组织对象间的依赖关系。
创建容器主要使用的时ApplicaitonContext和BeanFactory这两个顶级接口来实现的!两者之间的关系为: ApplicaitonContext是BeanFactory的子接口,因此ApplicaitonContext不仅继承了父类的所有功能,而且自己也实现了更多的功能。
两种顶级接口实现的区别:
- BeanFactory是最低层的容器接口,只提供了最基础的功能:依赖注入和实例化,并且使用懒加载的方式,这意味着bean对象只有在getBean调用他时才实例化。
- ApplicaitonContext(应用上下文),他是BeanFactory的子类,与BeanFactory的加载方式不同,他是预加载,所以每一个bean对象在ApplicaitonContext启动的时候就开始了实例化
- 除了基础功能,还添加了很多增强:
- 整合了Bean的生命周期(管理了Bean对象的整个生命周期)
- i18n国际化功能(MessageSource)
- 载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层(可以有多个上下文,可以是独立的,也可以是有关系的)
- 事件发布响应机制(ApplicationEventPublisher)
- AOP:AOP 是 Aspect Oriented Programming(面向切面编程) 的简称,和OOP(面向对象编程)一样是一种编程思想,是对OOP的一种补充。