论坛首页 Java企业应用论坛

我对IoC/DI的理解

浏览 40881 次
该帖已经被评为精华帖
作者 正文
   发表时间:2012-04-01  
zhaoshunxin 写道
最近刚刚理解IOC的一些知识,也可能有些曲解


一起探讨,概念本来就是模糊的,不像语法,对就是对,错就是错,概念不这样
0 请登录后投票
   发表时间:2012-04-01  
擦,这么多字,真不想看下去。
0 请登录后投票
   发表时间:2012-04-01   最后修改:2012-04-01
lianglove_0 写道
擦,这么多字,真不想看下去。

好吧
0 请登录后投票
   发表时间:2012-04-01  
LZ,你好。spring的两个特性就是IOC和AOP。被你这么一说,我就分不清IOC和DI什么区别和联系了?
0 请登录后投票
   发表时间:2012-04-01  
wjm19870226 写道
LZ,你好。spring的两个特性就是IOC和AOP。被你这么一说,我就分不清IOC和DI什么区别和联系了?


我的理解:
IoC容器: 实例化、初始化组件、提供组件运行环境、管理组件声明周期;DI是对它的限定,约束它还具有组件装配的功能。
IoC: 控制反转(控制权的换位),框架共性,只要是框架就具有的特性。
DI:  依赖注入, 利用单独的装配器(其实就是我们IoC容器)进行组件的依赖装配。

因此一般我们叫IoC/DI容器,DI是对IoC容器更好的限定。

0 请登录后投票
   发表时间:2012-04-01  
jinnianshilongnian 写道
wjm19870226 写道
LZ,你好。spring的两个特性就是IOC和AOP。被你这么一说,我就分不清IOC和DI什么区别和联系了?


我的理解:
IoC容器: 实例化、初始化组件、提供组件运行环境、管理组件声明周期;DI是对它的限定,约束它还具有组件装配的功能。
IoC: 控制反转(控制权的换位),框架共性,只要是框架就具有的特性。
DI:  依赖注入, 利用单独的装配器(其实就是我们IoC容器)进行组件的依赖装配。

因此一般我们叫IoC/DI容器,DI是对IoC容器更好的限定。


3GU,LZ,好人!
0 请登录后投票
   发表时间:2012-04-01  
wjm19870226 写道
jinnianshilongnian 写道
wjm19870226 写道
LZ,你好。spring的两个特性就是IOC和AOP。被你这么一说,我就分不清IOC和DI什么区别和联系了?


我的理解:
IoC容器: 实例化、初始化组件、提供组件运行环境、管理组件声明周期;DI是对它的限定,约束它还具有组件装配的功能。
IoC: 控制反转(控制权的换位),框架共性,只要是框架就具有的特性。
DI:  依赖注入, 利用单独的装配器(其实就是我们IoC容器)进行组件的依赖装配。

因此一般我们叫IoC/DI容器,DI是对IoC容器更好的限定。


3GU,LZ,好人!

0 请登录后投票
   发表时间: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
1 请登录后投票
   发表时间: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("凤姐"); (注入类似在执行这句)

0 请登录后投票
   发表时间: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一些操作。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics