一、IOC的理解:
springIOC又叫控制反转(Inversion ofControl),在传统的java编程里我们只能通过new关键字来创建对象,这就导致了对象与对象之间的依赖关系很复杂,耦合程度较高。而IOC的作用是实现了对对象的控制管理。也就是我们把设计好的对象交给IOC容器控制管理,当我们需要的时候就直接从IOC容器中获取。而有了IOC容器管理这些bean以后,相当于我们把对象的创建和查找依赖对象的控制权交给了容器,这就是的对象与对象之间的依赖关系是一种松耦合状态,极大程度的提高了程序的灵活性和高可用性。
二、IOC容器
Spring就是用一个ConcurrentHashMap来作为IOC容器存储的,其中key是beanName,value是bean实例。
三、IOC好处
1、管理对象创建和维护对象依赖关系。 对象创建不是一件容易的事情,在对象关系比较复杂时,如果是依赖程序员来维护,那是相当头痛的。
2、解耦,容器去维护具体对象。
3、托管某些类的产生过程。例如,我们在类产生过程中需要去做一些事情,最直接的例子就是代理,如果有容器程序可以把这部分处理交给容器,应用程序则无需去关心类是如何完成代理的。
四、IOC的优点
1、以最小的代价和最小的侵入性实现对象的松散耦合。
2、ioc容器支持加载服务时的饿汉式的初始化和懒加载。
饿汉式初始化:类加载的时候就创建类实例。与之对应的还有,懒汉式初始化,懒汉式初始化就是在第一次调用时创建实例对象。
懒加载:是一种延迟加载机制,在需要用到某个对象或数据时才进行加载,而不是在系统启动或加载时立即加载。
五、Spring IOC的处理流程
主要分为三个阶段:
1、IOC容器的初始化。根据程序中的XML配置文件或者注解等bean的声明方式通过加载解析后生成一个BeanDefinition(因为BeanDefinition中存储的是bean的定义消息),然后把BeanDefinition注册到IOC容器中。通过注解或XML声明的bean会解析得到一个BeanDefinition实体,这个实体中包含bean中定义的基本属性和其他一些消息,最后把这个BeanDefinition保存到Map中,从而完成初始化。IOC的作用就是对这些注册bean的定义信息处理和维护,它是IOC容器控制反转的核心。
2、第二个阶段是Bean初始化和依赖注入。通过反射机制,针对没用设置lazy-init属性的单例bean进行初始化,完成bean的依赖注入。
3、第三个阶段是bean的使用。通常我们会通过注解@Autowired或者beanFactory.getBean()从IOC容器中获取bean。
仅供参考。