﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-Lori</title><link>http://www.blogjava.net/Lori/</link><description /><language>zh-cn</language><lastBuildDate>Thu, 07 May 2026 02:10:21 GMT</lastBuildDate><pubDate>Thu, 07 May 2026 02:10:21 GMT</pubDate><ttl>60</ttl><item><title>Spring中依赖注入的两种方式的区别  </title><link>http://www.blogjava.net/Lori/archive/2011/11/15/363798.html</link><dc:creator>lori</dc:creator><author>lori</author><pubDate>Tue, 15 Nov 2011 03:17:00 GMT</pubDate><guid>http://www.blogjava.net/Lori/archive/2011/11/15/363798.html</guid><wfw:comment>http://www.blogjava.net/Lori/comments/363798.html</wfw:comment><comments>http://www.blogjava.net/Lori/archive/2011/11/15/363798.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Lori/comments/commentRss/363798.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Lori/services/trackbacks/363798.html</trackback:ping><description><![CDATA[<span style="font-family: Arial, Helvetica, simsun, u5b8bu4f53; font-size: 14px; line-height: 25px; ">
<p style="line-height: 25px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">Spring中实现IOC的方式：依赖注入（Dependency Injection）</p>
<p style="line-height: 25px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp; 1：Spring中依赖注入的两种方式：</p>
<p style="line-height: 25px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp;（1）：通过 setter 方法注入：&nbsp;</p>
<p style="line-height: 25px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name=&#8220; &#8221; &gt;&lt;/property&gt;</p>
<p style="line-height: 25px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp; &nbsp; &nbsp;其中，name属性的取值依setter方法名而定，要求这个类里面这个对应的属性必须有setter方法</p>
<p style="line-height: 25px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp;（2）：通过构造方法注入：&nbsp;</p>
<p style="line-height: 25px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;constructor-arg index=&#8221;&#8221;&gt;&lt;/ constructor-arg&gt;</p>
<p style="line-height: 25px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp; &nbsp; &nbsp;其中，index表示构造方法中的参数索引(第一个参数索引为0)</p>
<p style="line-height: 25px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp;&nbsp;&nbsp;&nbsp; 要求这个类里面必须有想对应的构造方法</p>
<p style="line-height: 25px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp; 2：二者使用区别：</p>
<p style="line-height: 25px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><strong style="line-height: 25px; ">spring依赖注入之构造注入的优点：</strong></p>
<p style="line-height: 25px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">　　构造注入可以再构造器中决定依赖关系的注入顺序，优先依赖的优先注入。</p>
<p style="line-height: 25px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">　　对于依赖关系无须变化的Bean，构造注入更有用处;因为没有setter方法，所有的依赖关系全部在构造器内设定，因此，不用担心后续代码对依赖关系的破坏。</p>
<p style="line-height: 25px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">　　依赖关系只能在构造器中设定，则只有组件的创建者才能改变组件的依赖关系。对组件的调用者而言，组件内部的依赖关系完全透明，更符合高内聚的原则;</p>
<p style="line-height: 25px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">　　建议采用以设置注入为主，构造注入为辅的注入策略。<strong style="line-height: 25px; ">对于依赖关系无须变化的注入，尽量采用构造注入;而其他的依赖关系的注入，则考虑采用设置注入。</strong></p>
<p style="line-height: 25px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; constructor : 可以在构建对象的同时，把依赖关系也构建好。对象创建好就准备好的所有的资源。安全性高。&nbsp;</p>
<p style="line-height: 25px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp;<strong style="line-height: 25px; ">spring依赖注入之设置注入的优点：</strong></p>
<p style="line-height: 25px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setter : 建立的对象关系（参数）很多。创建完对象之后再同过set（）方法进行设定。&nbsp;</p>
<p style="line-height: 25px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">　　与传统的JavaBean的写法更相似，程序员更容易理解、接受，通过setter方式设定依赖关系显得更加直观、明显;</p>
<p style="line-height: 25px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">　　对于复杂的依赖关系，如果采用构造注入，会导致构造器过于臃肿，难以阅读。Spring在创建Bean实例时，需要同时实例化其依赖的全部实例，因而导致死你功能下降。而使用设置注入，则避免这下问题;</p>
<p style="line-height: 25px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">　　尤其在某些属性可选的情况下，多参数的构造器更加笨拙。</p>
<p style="line-height: 25px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Spring 鼓励使用setter的方式注入。</p>
</span><img src ="http://www.blogjava.net/Lori/aggbug/363798.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Lori/" target="_blank">lori</a> 2011-11-15 11:17 <a href="http://www.blogjava.net/Lori/archive/2011/11/15/363798.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>