博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IOC容器简介和学习大纲
阅读量:2222 次
发布时间:2019-05-08

本文共 1826 字,大约阅读时间需要 6 分钟。

前言

上一篇我们对Spring框架进行了一个简单的概述了解到Spring框架的两大核心:IOC和AOP我们的源码分析首先就来学习Spring的IOC容器,之后是AOP这一篇我们先了解一下什么是IOC容器以及后续IOC容器部分学习大纲

控制反转-IOC(Inversion of Control)

1)常规方式创建对象

正常情况下,多个类相互配合工作,在入口类通过new来创建所依赖的对象实例(持有引用)

2)控制反转创建对象

控制反转,是将需要的对象预先创建出来放到容器中当需要对象引用时,向容器申请并由容器注入到对象中,即依赖注入

3)控制反转,反转了什么?

所谓控制反转(也叫依赖反转),其实是依赖对象的获得被反转了,所以也被称作依赖注入应用控制反转后,当对象被创建时,由一个IOC容器将依赖对象注入到对象中所以,控制反转是关于一个对象如何获取它所依赖对象的引用,这里的反转指的是责任的反转

4)控制反转(IOC)和依赖注入(DI)

控制反转(IOC):指的是容器控制对象依赖注入(DI):指的是对象需要依赖容器来获得所以说,IOC和DI是同一思想下不同维度的表现

5)常规方式和控制反转的对比-控制反转的优点

常规方式下,由入口类主动创建依赖对象,这导致代码高度耦合并降低了代码的可测试性依赖反转,将对象的依赖注入交给容器完成,解耦代码的同时提高了代码的可测试性

6)设计模式的应用

设计原则中包含一条"好莱坞"原则,即控制反转好莱坞原则:“不要给我们打电话,我们会给你打电话(don‘t call us, we‘ll call you)”这一点在IOC上得到了完美体现,IOC注重的是设计思想,从常规创建对象的做法(new对象),转变为向IOC容器提交申请,被动等待IOC容器返回资源。模板方法模式充分的体现了“好莱坞”原则

Spring IOC容器

有了控制反转和依赖注入的基础,我们来认识一下Spring的IOC容器

在Spring框架中,IOC容器是控制反转模式实现的载体IOC容器是具有依赖注入功能的容器,是可以创建对象的容器IOC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖通过依赖注入在容器创建对象后,处理对象的依赖关系

1)为什么使用IOC容器

将面向对象系统中的对象进行分类,除了一部分是数据外,大多数对象是用来处理数据的这些对象是系统中的基础部分且不常变化,所以这些对象以单件形式就可以满足应用需求同时,这些对象间的依赖关系也比较稳定,一般不会随应用的运行状态而改变基于以上特性,这些对象非常适合由IOC容器进行管理

2)IOC容器的优点

IOC容器将对象的依赖关系有序地建立起来通过使用IOC容器,对象依赖关系的管理被反转到了IOC容器中对象之间的相互依赖关系由IOC容器进行管理,并由IOC容器完成对象的注入简化了对象依赖关系的管理,把应用从复杂的对象依赖关系管理中解放出来

3)IOC容器的注入方式

IOC容器可以在对象生成或初始化时直接将数据注入到对象中也可以通过将对象引用注入到对象数据域中的方式来注入对方法调用的依赖这种依赖注入是可递归的,对象被逐层注入注入方式:    接口注入-不推荐,违背Spring离开框架也能活的非侵入式设计原则    setter注入(推荐)    构造器注入    注解方式注入(推荐)Spring IOC容器提供了对特定依赖的检查,以防止注入异常

IOC容器学习大纲

学习Spring IOC容器,首先我们先列出一个学习大纲1,IOC容器的结构体系:    分析IOC容器的接口继承关系及不同接口的功能实现,如BeanFactory定义IOC最基本功能2,IOC容器实现    Spring所提供的多种IOC实现,如:xmlBeanFactory 和 ApplicationContext3,IOC容器的初始化过程    IOC容器初始化都做了那些事情?资源定位,Bean的载入和解析,注册等4,IOC容器的依赖注入    容器初始化完成后,什么时候发生依赖注入,如何实现的注入5,IoC容器lazy-init预实例化的实现6,BeanFactory的实现7,BeanPostProcessor后置处理器的实现8,自动装配(autowiring)的实现9,Bean的依赖检查10,Bean感知IOC容器目前暂时只想到这些,更新过程中会有适当的变更和细化,随时更新

转载地址:http://cbvfb.baihongyu.com/

你可能感兴趣的文章
检查Linux服务器性能
查看>>
Java 8新的时间日期库
查看>>
Chrome开发者工具
查看>>
【LEETCODE】102-Binary Tree Level Order Traversal
查看>>
【LEETCODE】106-Construct Binary Tree from Inorder and Postorder Traversal
查看>>
【LEETCODE】202-Happy Number
查看>>
和机器学习和计算机视觉相关的数学
查看>>
十个值得一试的开源深度学习框架
查看>>
【LEETCODE】240-Search a 2D Matrix II
查看>>
【LEETCODE】53-Maximum Subarray
查看>>
【LEETCODE】215-Kth Largest Element in an Array
查看>>
【LEETCODE】241-Different Ways to Add Parentheses
查看>>
【LEETCODE】312-Burst Balloons
查看>>
【LEETCODE】232-Implement Queue using Stacks
查看>>
【LEETCODE】225-Implement Stack using Queues
查看>>
【LEETCODE】155-Min Stack
查看>>
【LEETCODE】20-Valid Parentheses
查看>>
【LEETCODE】290-Word Pattern
查看>>
【LEETCODE】36-Valid Sudoku
查看>>
【LEETCODE】205-Isomorphic Strings
查看>>