Spring——IOC容器基本概念
Posted 任长江
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring——IOC容器基本概念相关的知识,希望对你有一定的参考价值。
前一段时间在学习Spring,感觉Spring确实挺有魅力的,学习之后,对学过的知识简单的做一下总结,如果要总结IOC容器自然是少不了的,我前边有过一篇文章来介绍IOC的思想,但是没有涉及到Spring容器,在这里结合着Spring容器来看一下IOC的相关知识和美妙之处吧!IOC是Spring容器的核心,Spring的AOP和声明式事务等功能的实现都依赖于IOC容器的存在。
写着写着博客突然想我女朋友了,也不知道她现在吃饭了没有,开心不开心,现在在哪儿,叫什么名字!哈哈…..,小开一个玩笑!一个小猿需要找到女朋友帮他做家务,下面以一个小猿找女朋友来介绍一下IOC容器吧,哈哈…..,都是套路,慢慢都快跟上城里人脚步了。
按说小猿(XiaoYuan)找女朋友应该是这样的,假设小猿喜欢小丽(XiaoLi),那么小猿就想要小丽能成为他的对象,于是程序就是这样的:
public class XiaoYuan
public void findGirlDo()
//直接找到小丽
XiaoLi girl = new XiaoLi();
girl.doHouseWork();
UML:
但是情况并非小猿想的那么好,因为,小丽并不喜欢他,那么于是,小猿开始想,既然小丽不能成为他的对象,那么一个和小丽条件差不多的女孩(Girl)也行,于是上边的程序变成了下边的这样:
public class XiaoYuan
public void findGirlDo()
//对XiaoLi的依赖减弱,new的可以不是XiaoLi
Girl girl = new XiaoLi();
girl.doHouseWork();
UML:
小猿总是不幸的,现在这世道就算是连一个和小丽条件差不多的女孩也找不到啊,哎,于是,小猿心里暗自思量,算了,是个女孩就行了,情况更糟糕的是,小猿身边已经没有女孩了,只能通过媒婆(MatchMaker)来介绍一下了,于是,就有了下边的程序。
public class XiaoYuan
private Girl girl;
//用来将对象注入进来
public XiaoYuan(Girl girl)
this.girl = girl;
//让女孩做家务
public void findGirlDo()
girl.doHouseWork();
public class MatchMaker
public void match()
//媒婆找到小丽这个女孩
Girl girl = new XiaoLi();
//媒婆找到小猿,把小丽介绍给小猿。
XiaoYuan xiaoYuan = new XiaoYuan(girl);
//小猿让小丽帮他做家务
xiaoYuan.findGirlDo();
UML:
好吧,那么这就符合IOC的概念了,控制反转,控制(选择对象的权利)反转(选择对象的权利小猿已交给了媒婆了)
下边继续介绍一下IOC注入的三种方式,其实对照上边的故事来说就是,如果媒婆找到了一个比较适合的对象后,小猿需要媒婆通过什么样的方式把对象介绍给他。
1、构造函数注入:
上边的程序就是构造函数注入,这种情况就是小猿着实着急了,只要一被媒婆通知过去就非要领一个对象回去不可了。也就是在new小猿的时候就引入了一个对象。
2、属性注入:
这种情况就是,媒婆把小猿叫过去,小猿还要考虑一下,这个女孩能不能跟我一起走下去,如果可以那就通过set方法将女孩注入进来,表示同意。用程序表示如下:
public class XiaoYuan
private Girl girl;
//set方法将对象注入
public void setGirl(Girl girl)
this.girl = girl;
//让女孩做家务
public void findGirlDo()
girl.doHouseWork();
3、接口注入:
接口注入其实和属性注入是一样的,只是,属性注入用的是属性的set方法,而接口注入是让小猿实现一个接口,在接口的一个方法中进行注入。程序如下:
public class XiaoYuan implements InjectGirl
private Girl girl;
//set方法将对象注入
public void inject(Girl girl)
this.girl = girl;
//让女孩做家务
public void findGirlDo()
girl.doHouseWork();
通过上边小猿找对象的过程可以看出,小猿对小丽的依赖性越来越弱,最开始小猿完全依赖于小丽,后边,小猿不再那么依赖于小丽,只要跟小丽条件差不多的女孩就可以,但是还是存有依赖,再后边小猿就不再依赖于小丽了,这种依赖关系转交给了媒婆,媒婆既可以介绍小丽给小猿,也可以介绍一个和小丽条件差不多的女孩给小猿。但是现在还是存在一个问题,那就是媒婆和小猿以及女孩之间还是存在依赖关系,现在出来了一个机构,这个机构可以实现这样一个功能,只要小猿在这个机构登记一下,后边的事情这个机构就包办了,比如小猿在这个机构里登记了我想找一个女孩,小丽是个女孩也在这个机构登记了,那么这个机构就从介绍到婚事就全包办了。
<bean id="girl" class="com.test.XiaoLi"></bean>
<bean id="XiaoYuan" class="com.test.XiaoYuan" p:girl-ref="girl"></bean>
Spring就是这样一个机构(术语叫容器),Spring为注册的Bean提供了一系列的服务,从实例化到Bean之间的装配都可以实现。这也是容器这个概念的基本理解,它为放入到这个容器中的对象提供一系列的服务。
这篇文章就介绍到这里吧,到这里只是介绍了一下IOC的一个基本概念,后边再介绍Spring中IOC的其他相关知识吧。
以上是关于Spring——IOC容器基本概念的主要内容,如果未能解决你的问题,请参考以下文章