Spring学习笔记(七):IOC控制反转
来源:互联网 发布:陕西大数据集团前景 编辑:程序博客网 时间:2024/05/23 02:01
一、以下言论转自知乎解答:
ioc的思想最核心的地方在于,资源不由使用资源的双方管理,而由不使用资源的第三方管理,这可以带来很多好处。第一,资源集中管理,实现资源的可配置和易管理。第二,降低了使用资源双方的依赖程度,也就是我们说的耦合度。
也就是说,甲方要达成某种目的不需要直接依赖乙方,它只需要达到的目的告诉第三方机构就可以了,比如甲方需要一双袜子,而乙方它卖一双袜子,它要把袜子卖出去,并不需要自己去直接找到一个卖家来完成袜子的卖出。它也只需要找第三方,告诉别人我要卖一双袜子。这下好了,甲乙双方进行交易活动,都不需要自己直接去找卖家,相当于程序内部开放接口,卖家由第三方作为参数传入。甲乙互相不依赖,而且只有在进行交易活动的时候,甲才和乙产生联系。反之亦然。这样做什么好处么呢,甲乙可以在对方不真实存在的情况下独立存在,而且保证不交易时候无联系,想交易的时候可以很容易的产生联系。甲乙交易活动不需要双方见面,避免了双方的互不信任造成交易失败的问题。因为交易由第三方来负责联系,而且甲乙都认为第三方可靠。那么交易就能很可靠很灵活的产生和进行了。
这就是ioc的核心思想。生活中这种例子比比皆是,支付宝在整个淘宝体系里就是庞大的ioc容器,交易双方之外的第三方,提供可靠性可依赖可灵活变更交易方的资源管理中心。另外人事代理也是,雇佣机构和个人之外的第三方。嗯,就这样,希望对题主有帮助。
==========================update===========================
在以上的描述中,诞生了两个专业词汇,依赖注入和控制反转
所谓的依赖注入,则是,甲方开放接口,在它需要的时候,能够讲乙方传递进来(注入)
所谓的控制反转,甲乙双方不相互依赖,交易活动的进行不依赖于甲乙任何一方,整个活动的进行由第三方负责管理。
这就是spring IOC的思想所在,不要只谈DI IOC这些概念。
人之所恶在好为人师,不实知,谨慎言。
二、下面是详细例子:
1、UserDao接口
public interface UserDao{ public void saySome();}
2、下面是两个实现
UserDaoImp1 和 UserDaoImp2
//UserDaoImp1public class UserDaoImp1 implements UserDao{ public void saySome() { system.out.println("i'm User1"); }}//UserDaoImp2public class UserDaoImp2 implements UserDao{ public void saySome() { system.out.println("i'm User2"); }}
3、下面是业务逻辑service
//UserServicepublic class UserService{ public UserDao userDao; public void SetUserDao(UserDao userDao) { this.userDao=userDao; } public UserDao GetUserDao() { return userDao; } //普通方法 public void Show() { userDao.saySome(); }}
4、在main中调用
public class MainProgram{ public static void main(string[] args) { UserService userService=new UserService(); //如果配置文件中配置了user1,就输出i'm user1。否则输出i'm user2 userService.Show(); }}
5、下面是配置文件
<bean id="UserDaoImp1" class="com.test.UserDaoImp1"> </bean> <bean id="UserDaoImp2" class="com.test.UserDaoImp2"> </bean> <bean id="UserService" class="com.test.UserService"> <property name="userDao"> <ref local="UserDaoImp1"/> </property> </bean>
以上代码体现出了控制反转的好处:
如果想调用UserDaoImp2,就在配置文件中修改配置即可,很方便;
如果没有用控制反转:
那么UserDao就是在service中直接实例化,如下:
//UserServicepublic class UserService{ //此时如果想调用UserDaoImp2,只能在此处修改代码,明显没有直接在配置文件中改着方便 public UserDao userDao=new UserDaoImp1(); //普通方法 public void Show() { userDao.saySome(); }}
- Spring学习笔记(七):IOC控制反转
- spring学习笔记(IOC-控制反转)
- 【Spring学习笔记】控制反转IoC
- Spring学习IoC控制反转(一)
- Spring IoC(控制反转)
- Spring IoC(控制反转)
- Spring学习(6)Spring核心思想 控制反转Ioc
- Spring 4 学习笔记2:控制反转(IoC)和依赖注入(DI)
- spring笔记——Ioc控制反转
- Spring 框架学习—控制反转(IOC)
- Spring 框架学习—控制反转(IOC)
- Spring 框架学习—控制反转(IOC)
- Spring 框架学习—控制反转(IOC)
- Spring基础学习二 : IOC控制反转
- spring学习--总结IOC(控制反转)
- Spring IOC 反转控制
- Spring-----> IOC(控制反转)
- Spring - 控制反转IOC
- POJ 1679 The Unique MST(判断最小生成树_Kruskal)
- java web前端学习网站
- Elasticsearch 索引优化
- MDK如何生成bin文件?
- Lowest Common Ancestor of a Binary Tree
- Spring学习笔记(七):IOC控制反转
- CentOS 7安装Nginx
- 【对象序列化】pickle.dumps()--python对象序列化/反序列化
- POJ 3225 Help with Intervals (线段树 成段更新, 懒惰标记*2)
- leetcode:Binary Tree Paths
- 动态链接库
- Linux中brk()系统调用,sbrk(),mmap(),malloc(),calloc()的异同
- 借口也是类。也要声明一个对象来调用
- 大型企业Unix服务器的自动化运维