IoC(Inversion of Control) 是 Spring 中一个重要的概念,是一种解耦的设计思想、一个原则,而不是一个模式。它主要作用是通过 IOC 容器实现具有依赖关系的对象之间的解耦(IOC 容易管理对象,你只管使用即可),从而降低代码之间的耦合度。
DI(Dependecy Inject)是实现控制反转的一种设计模式,依赖注入就是将实例变量传入到一个对象中去。
在 Spring 的 BeanFactory 或 ApplicationContext 中,使用了工厂模式创建 bean 对象。
BeanFactory
:延迟注入(使用到某个 bean 的时候才会注入), 相比于ApplicationContext 来说会占用更少的内存,程序启动速度更快。ApplicationContext
:容器启动的时候,不管用没用到,一次性创建所有 bean 。BeanFactory 仅提供了最基本的依赖注入支持,ApplicationContext 扩展了 BeanFactory ,除了有BeanFactory的功能还有额外更多功能,所以一般开发人员使用ApplicationContext会更多。Spring 中 bean 的默认作用域就是 singleton(单例)的。 除了 singleton 作用域,Spring 中 bean 还有下面几种作用域:
Spring 通过 **ConcurrentHashMap**
实现单例注册表的特殊方式实现单例模式。 Spring 实现单例的核心代码如下: