锁定老帖子 主题:我对IoC/DI的理解
该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2012-04-01
zhaoshunxin 写道 最近刚刚理解IOC的一些知识,也可能有些曲解
一起探讨,概念本来就是模糊的,不像语法,对就是对,错就是错,概念不这样 |
|
返回顶楼 | |
发表时间:2012-04-01
擦,这么多字,真不想看下去。
|
|
返回顶楼 | |
发表时间:2012-04-01
最后修改:2012-04-01
lianglove_0 写道 擦,这么多字,真不想看下去。
好吧 |
|
返回顶楼 | |
发表时间:2012-04-01
LZ,你好。spring的两个特性就是IOC和AOP。被你这么一说,我就分不清IOC和DI什么区别和联系了?
|
|
返回顶楼 | |
发表时间:2012-04-01
wjm19870226 写道 LZ,你好。spring的两个特性就是IOC和AOP。被你这么一说,我就分不清IOC和DI什么区别和联系了?
我的理解: IoC容器: 实例化、初始化组件、提供组件运行环境、管理组件声明周期;DI是对它的限定,约束它还具有组件装配的功能。 IoC: 控制反转(控制权的换位),框架共性,只要是框架就具有的特性。 DI: 依赖注入, 利用单独的装配器(其实就是我们IoC容器)进行组件的依赖装配。 因此一般我们叫IoC/DI容器,DI是对IoC容器更好的限定。 |
|
返回顶楼 | |
发表时间:2012-04-01
jinnianshilongnian 写道 wjm19870226 写道 LZ,你好。spring的两个特性就是IOC和AOP。被你这么一说,我就分不清IOC和DI什么区别和联系了?
我的理解: IoC容器: 实例化、初始化组件、提供组件运行环境、管理组件声明周期;DI是对它的限定,约束它还具有组件装配的功能。 IoC: 控制反转(控制权的换位),框架共性,只要是框架就具有的特性。 DI: 依赖注入, 利用单独的装配器(其实就是我们IoC容器)进行组件的依赖装配。 因此一般我们叫IoC/DI容器,DI是对IoC容器更好的限定。 3GU,LZ,好人! |
|
返回顶楼 | |
发表时间:2012-04-01
wjm19870226 写道 jinnianshilongnian 写道 wjm19870226 写道 LZ,你好。spring的两个特性就是IOC和AOP。被你这么一说,我就分不清IOC和DI什么区别和联系了?
我的理解: IoC容器: 实例化、初始化组件、提供组件运行环境、管理组件声明周期;DI是对它的限定,约束它还具有组件装配的功能。 IoC: 控制反转(控制权的换位),框架共性,只要是框架就具有的特性。 DI: 依赖注入, 利用单独的装配器(其实就是我们IoC容器)进行组件的依赖装配。 因此一般我们叫IoC/DI容器,DI是对IoC容器更好的限定。 3GU,LZ,好人! |
|
返回顶楼 | |
发表时间:2012-04-01
最后修改:2012-04-01
你始终没有提到ioc/di的实现原理上。如何用反射实现。
两个最主要的名词“beanwraper” “beanfactory”。 我觉得 前面讲的一堆东西有点虚。 再上一层,关于bean的托管。 最近我在学习ejb。 我觉得spring之所以称为轻量级容器,是因为在ipc/di ,aop上 它替代了ejb工程中中间件的功能。甚至有想法,觉得spring就是根据ejb的思路做的轻量级实现。 这里有个很好的spring源码的帖子,分享给你。 http://www.iteye.com/topic/1120717 |
|
返回顶楼 | |
发表时间:2012-04-01
最后修改:2012-04-01
wjm19870226 写道 LZ,你好。spring的两个特性就是IOC和AOP。被你这么一说,我就分不清IOC和DI什么区别和联系了?
AOP是面向切面的编程。意思是,你要写一个服务。可以通过切面帮你形成一个代理。 在你的服务里方法执行前,返回值后,出现异常等情况里插入了一些操作。 怎么实现,其实是偷偷的继承了你的类,重写了你的方法。在调用时,调用的是这个隐藏的子类(代理类)。对你屏蔽了起来。 ioc是控制反转,意思是说,你要实例化一个对象,不是自己new一个。而是从工厂里给你分一个。实例化的过程教给了工厂 di是依赖注入。你可以把数据通过配置文件set到你的实例里(其实还有接口注入,构造器注入)。而不是通过 实例.setxxx()方法来给实例里的成员赋值。 ioc和di的联系就是。 ioc帮你实例化了一个类。但是这个类里的一些成员没有赋值,然后通过di为实例里的成员赋值。 最常见的例子话。 比如你通过ioc管理了一个userDTO。 里面有用户的name成员 class UserDTO{ private String name=""; public setName(String name){ this.name=name; } } UserDTO user = new UserDTO(); (控制反转类似执行这句) user.setName("凤姐"); (注入类似在执行这句) |
|
返回顶楼 | |
发表时间:2012-04-01
leonayx123 写道 你始终没有提到ioc/di的实现原理上。如何用反射实现。
两个最主要的名词“beanwraper” “beanfactory”。 我觉得 前面讲的一堆东西有点虚。 再上一层,关于bean的托管。 最近我在学习ejb。 我觉得spring之所以称为轻量级容器,是因为在ipc/di ,aop上 它替代了ejb工程中中间件的功能。甚至有想法,觉得spring就是根据ejb的思路做的轻量级实现。 这里有个很好的spring源码的帖子,分享给你。 http://www.iteye.com/topic/1120717 此处只是我的理解,只是简单讲讲发展历程,不涉及实现 我这篇博客涉及基础部分http://jinnianshilongnian.iteye.com/blog/1415463 spring中,BeanDefinition + BeanFactory 是基础,BeanWapper简化Bean的实例化和装配,简化JavaBean一些操作。 |
|
返回顶楼 | |