java的对象注入方法有哪些?(什么是依赖注入入,控制翻转的写法/实现方法)

依赖注入与控制反转
看到一个对这个概念很好诠释的帖子,特转发过来供大家一起学习
转载地址/topic/692793
&IoC——Inversion of Control&
&DI——Dependency
Injection&& 依赖注入
要想理解上面两个概念,就必须搞清楚如下的问题:
参与者都有谁?
依赖:谁依赖于谁?为什么需要依赖?&
注入:谁注入于谁?到底注入什么?
控制反转:谁控制谁?控制什么?为何叫反转(有反转就应该有正转了)?
依赖注入和控制反转是同一概念吗?
下面就来简要的回答一下上述问题,把这些问题搞明白了,IoC/DI也就明白了。
(1)参与者都有谁:
一般有三方参与者,一个是某个对象;一个是IoC/DI的容器;另一个是某个对象的外部资源。
又要名词解释一下,某个对象指的就是任意的、普通的Java对象;
IoC/DI的容器简单点说就是指用来实现IoC/DI功能的一个框架程序;对象的外部资源指的就是对象需要的,但是是从对象外部获取的,都统称资源,比如:对象需要的其它对象、或者是对象需要的文件资源等等。
(2)谁依赖于谁:
&&&&&&&&当然是某个对象依赖于IoC/DI的容器
(3)为什么需要依赖:
&&&&&&&&对象需要IoC/DI的容器来提供对象需要的外部资源
(4)谁注入于谁:
&&&&&&&&很明显是IoC/DI的容器
注入 某个对象
(5)到底注入什么:
&&&&&&&&就是注入某个对象所需要的外部资源
(6)谁控制谁:
&&&&&&&&当然是IoC/DI的容器来控制对象了
(7)控制什么:
&&&&&&&&主要是控制对象实例的创建
(8)为何叫反转:
反转是相对于正向而言的,那么什么算是正向的呢?考虑一下常规情况下的应用程序,如果要在A里面使用C,你会怎么做呢?当然是直接去创建C的对象,也就是说,是在A类中主动去获取所需要的外部资源C,这种情况被称为正向的。那么什么是反向呢?就是A类不再主动去获取C,而是被动等待,等待IoC/DI的容器获取一个C的实例,然后反向的注入到A类中。
用图例来说明一下,先看没有IoC/DI的时候,常规的A类使用C类的示意图,如图7所示:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
图7& 常规A使用C示意图
当有了IoC/DI的容器后,A类不再主动去创建C了,如图8所示:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
图8& A类不再主动创建C
而是被动等待,等待IoC/DI的容器获取一个C的实例,然后反向的注入到A类中,如图9所示:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&图9& 有IoC/DI容器后程序结构示意图
(9)依赖注入和控制反转是同一概念吗?
根据上面的讲述,应该能看出来,依赖注入和控制反转是对同一件事情的不同描述,从某个方面讲,就是它们描述的角度不同。依赖注入是从应用程序的角度在描述,可以把依赖注入描述完整点:应用程序依赖容器创建并注入它所需要的外部资源;而控制反转是从容器的角度在描述,描述完整点:容器控制应用程序,由容器反向的向应用程序注入应用程序所需要的外部资源。
(10)小结一下:
其实IoC/DI对编程带来的最大改变不是从代码上,而是从思想上,发生了“主从换位”的变化。应用程序原本是老大,要获取什么资源都是主动出击,但是在IoC/DI思想中,应用程序就变成被动的了,被动的等待IoC/DI容器来创建并注入它所需要的资源了。
这么小小的一个改变其实是编程思想的一个大进步,这样就有效的分离了对象和它所需要的外部资源,使得它们松散耦合,有利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。反射是实现控制反转和依赖注入的根本基础,对吗?
可以通过proxy也可以通过cglib这种,所以反射是一种途径但算不上唯一更谈不上根本
依赖注入是一种理念。。并没有什么非用不可的实现。。常用(在 Java 中不常用了)的还有构造函数注入和接口注入等等。。任何能传数据的方法都能拿来注入。。
可以这么说,动态加载类的属性和方法
已有帐号?
无法登录?
社交帐号登录      IoC(Inversion of Control),这是spring的核心,贯穿始终。所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。这是什么意思呢,举个简单的例子,我们是如何找女朋友的?常见的情况是,我们到处去看哪里有长得漂亮身材又好的mm,然后打听她们的兴趣爱好、qq号、电话号、手机号、MSN&&&,想办法认识她们,投其所好送其所要,然后嘿嘿&&这个过程是复杂深奥的,我们必须自己设计和面对每个环节。传统的程序开发也是如此,在一个对象中,如果要使用另外的对象,就必须创建它(自己new一个,或者从JNDI中查询一个),使用完之后还要将对象销毁(比如,Connection等),对象始终会和其他的接口或类藕合起来。
  那么IoC是如何做的呢?有点像通过婚介找女朋友,在我和女朋友之间引入了一个第三方机构:婚姻介绍所。婚介管理了很多男男女女的资料,我可以向婚介所提出一个列表,告诉它我想找个什么样的女朋友,比如长得像李嘉欣,身材像林林志玲,唱歌像刘德华,速度像刘翔,身高像姚明之类的,然后婚介就会按照我们的要求,提供一个mm,我们只需要去和她谈恋爱、结婚就行了。简单明了,如果婚介给我们的人选不符合要求,我们就会抛出异常。整个过程不再由我自己控 制,而是有婚介这样一个类似容器的机构来控制。Spring所倡导的开发方式就是如此,所有的类都会在spring容器中登记,告诉spring你是个什么东西,你需要什么东西,然后spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象 都被spring控制,所以这叫控制反转。如果你还不明白的话,我决定放弃。
&&&&IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过DI(Dependency Injection,依赖注入)来实现的。比如对象A需要操作数据库,以前我们总是要在A中自己编写代码来获得一个Connection对象,有了spring我们就只需要告诉spring,A中需要一个Connection,至于这个Connection怎么构造,何时构造,A不需要知道。在系统 运行时,spring会在适当的时候制造一个Connection,然后像打针一样,注射到A当中,这样就完成了对各个对象之间关系的控制。A需要依赖 Connection才能正常运行,而这个Connection是由spring注入到A中的,依赖注入的名字就这么来的。那么DI是如何实现的呢? Java 1.3之后一个重要特征是反射(reflection),它允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性,spring就是通过反射来实现注入的。
阅读(...) 评论() &问题: 控制反转与依赖注入??
正在学习Spring&IOC,请各位高手,根据自己的理解讲解下IOC的控制反转与依赖注入。始终不理解。。解决方案1:
IOC(Inversion&of&Control)即反向控制或依赖注入(DI,Dependence&Injection)。如正常情况下我们写程序的时候如果引用到别的bean都要首先声明一个这个类的对象。之后再使用这个对象进行操作,如果该对象又引用了有其他的对象,则需要再先声明其他的对象,如果其他的对象再引用的有其他的对象,则也必须先声明引用的其他的对象,如此反反复复,使我们大家花了很多时间在这种框架性的工作上,使我们没有更多的精力或时间花费在我们真正的逻辑的实现上。IOC即提供了这样的功能,我们的bean交由spring容器来管理,各个对象之间的关系我们不用去维护,只需要提供对应的set方法及对应的配置文件即可。这样我们可以花我们主要的精力放在我们的业务逻辑上。从字面上来讲,依赖注入即一个bean所依赖的类不需要我们自己去声明,而是交由spring把依赖的类自己注入进去。相比控制反转,用依赖注入来描述或翻译则更容易理解
可以参考文章:
http://blog.csdn.net/ma_shijie/archive//5988331.aspx解决方案2:
依赖注入是控制反转的一种实现,
简单的说,依赖注入就是:
有些字段不需要自己去new或写代码从哪里取来,&框架负责给它赋值;
不需自己赋值,而是依赖框架把值注入进来
以上介绍了“ 控制反转与依赖注入??”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:/itwd/3038482.html
上一篇: 下一篇:}

我要回帖

更多关于 什么是依赖注入 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信