很多人学Spring框架,总觉得IOC模糊不清?

前言学习过Spring框架的人一定都会听过Spring的IOC(控制反转) 这个概念,对于初学Spring的人来说,总觉得IOC是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spring框架的IOC的理解以及谈谈我对Spring IOC的理解 。

读者福利:私信回复【111】获取整理好的spring全家桶学习笔记和面试题资料(1184页PDF文档)

很多人学Spring框架,总觉得IOC模糊不清?

文章插图
 
IOC是什么IOC——Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想 。在JAVA开发中,IOC意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制 。如何理解好IOC呢?理解好IOC的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了”,那我们来深入分析一下:
(1)谁控制谁,控制什么:传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC是有专门一个容器来创建这些对象,即由Ioc容器来控制对 象的创建;谁控制谁?当然是IoC 容器控制了对象;控制什么?那就是主要控制了外部资源获取(不只是对象包括比如文件等) 。
(2)为何是反转,哪些方面反转了:有反转就有正转,传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;而反转则是由容器来帮忙创建及注入依赖对象;为何是反转?因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转;哪些方面反转了?依赖对象的获取被反转了 。
用图例说明一下,传统程序设计如图,都是主动去创建相关对象然后再组合起来:
很多人学Spring框架,总觉得IOC模糊不清?

文章插图
【很多人学Spring框架,总觉得IOC模糊不清?】 
当有了IOC的容器后,在客户端类中不再主动去创建这些对象了,如图所示:
很多人学Spring框架,总觉得IOC模糊不清?

文章插图
 
接下来我们说一下IOC的4个特性
很多人学Spring框架,总觉得IOC模糊不清?

文章插图
 
1. lazy-Init延迟加载Bean对象的延迟加载(延迟创建)
ApplicationContext 容器的默认?为是在启动服务器时将所有 singleton bean 提前进?实例化 。提前实例化意味着作为初始化过程的?部分,ApplicationContext实例会创建并配置所有的singleton bean 。
1.1 XML方式开启延迟加载:
lazy-init="" 配置bean对象的延迟加载 ,true或者false false就是立即加载
<bean id="lazyResult" class="com.lagou.edu.pojo.Result" lazy-init="false"></bean>我们先来看一下当lazy-init="false" 也就是立即加载的时候:
很多人学Spring框架,总觉得IOC模糊不清?

文章插图
 
可以看到,在容器启动后,getBean之前,lazyResult这个bean已经存在了 。
然后我们把lazy-init="true",设置为true
很多人学Spring框架,总觉得IOC模糊不清?

文章插图
 
然后我们F8往下走一步:
很多人学Spring框架,总觉得IOC模糊不清?

文章插图
 
发现出现了lazyResult
1.2 注解开启延迟加载:
@Lazy:
很多人学Spring框架,总觉得IOC模糊不清?

文章插图
 
1.3全局配置——default-lazy-init="":
在bean的根标签中:
很多人学Spring框架,总觉得IOC模糊不清?

文章插图
 
应用场景:
(1)开启延迟加载?定程度提?容器启动和运转性能
(2)对于不常使?的 Bean 设置延迟加载,这样偶尔使?的时候再加载,不必要从?开始该 Bean 就占?资源
2. FactoryBean和BeanFactory2.1 BeanFactory
容器的顶级接口,定义了容器的一些基础行为,负责生产和管理Bean的一个工厂,具体使用它下面的子接口类型,比如ApplicationContext
2.2 FactoryBean
spring中的bean有两种
  • 普通bean
  • 工厂bean(FactoryBean)
    可以生产某一个类型的bean实例(返回给我们),也就是说我们可以借助于它自定义bean的创建过程 。
Bean创建的三种?式中的静态?法和实例化?法和FactoryBean作?类似,FactoryBean使?较多,尤其在Spring框架?些组件中会使?,还有其他框架和Spring框架整合时使?


推荐阅读