<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[Heck's  Blog]]></title> 
<link>https://www.heckjj.com/index.php</link> 
<description><![CDATA[一瞬间的决定，往往可以改变很多，事实上，让自己成功的往往不是知识，是精神！ 如果你总是为自己找借口，那只好让成功推迟。执行力，今天！]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[Heck's  Blog]]></copyright>
<item>
<link>https://www.heckjj.com/post//</link>
<title><![CDATA[spring中bean按照名称和类型自动装配]]></title> 
<author>Heck &lt;@hecks.tk&gt;</author>
<category><![CDATA[编程杂谈]]></category>
<pubDate>Fri, 28 Mar 2014 05:34:33 +0000</pubDate> 
<guid>https://www.heckjj.com/post//</guid> 
<description>
<![CDATA[ 
	Spring中autowire属性<br/>default-autowire=&quot;x&quot;<br/>x有5个选择：byName,byType,constructor和autodetect,no<br/><br/>一、spring 自动装配 default-autowire=&quot;byName&quot;<br/><br/>Service.java<br/><br/>public class Service<br/>&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Source source;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public void setSource(Source source)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.source = source;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&#125;<br/><br/>applicationContext.xml：<br/>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;<br/>&lt;beans xmlns=&quot;http://www.springframework.org/schema/beans&quot;<br/>xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;<br/>xmlns:aop=&quot;http://www.springframework.org/schema/aop&quot;<br/>xmlns:tx=&quot;http://www.springframework.org/schema/tx&quot;<br/>xsi:schemaLocation=&quot;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd&quot;<br/>&nbsp;&nbsp; default-autowire=&quot;byName&quot;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;bean id=&quot;source&quot; class=&quot;tk.hecks.spring.DBCPSource&quot; scope=&quot;prototype&quot;/&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;bean id=&quot;service&quot; class=&quot;tk.hecks.spring.Service&quot; scope=&quot;prototype&quot;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/bean&gt;<br/>&lt;/beans&gt;<br/><br/>tk.hecks.spring.DBCPSource实现了Source接口<br/>xml中并没有给 bean service配Source属性，但在beans中设置了default-autowire=&quot;byName&quot;,这样配置文件会自动根据 tk.hecks.spring.Service 中的set<span style="color: #FF0000;">Source</span>找bean id=&quot;<span style="color: #FF0000;">Source</span>&quot;的bean ，然后自动配上去，如果没找到就不装配。<br/><br/>注意：byName的name是java中<span style="color: #0000FF;">setXxxx </span>的<span style="color: #0000FF;">Xxxx</span>, 和上面设置的Source source中source拼写毫无关系，完全可以是<br/><br/>public class Service<br/>&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Source source1;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public void setSource(Source source1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.source1 = source1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&#125;<br/><br/>结果相同。<br/>byName的方式要保证在Service类中的set方法为<span style="color: #FF0000;">setSource</span>，很显然不是很灵活，也就是说要和上面声明的id的值要相同.<br/><br/>二、spring 自动装配 default-autowire=&quot;byType&quot;<br/>Service.java同上<br/><br/>applicationContext.xml<br/>&lt;beans<br/>&nbsp;&nbsp; ...<br/>&nbsp;&nbsp; default-autowire=&quot;byType&quot;&gt;<br/>&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;bean id=&quot;dbcpSource&quot; class=&quot;tk.hecks.spring.DBCPSource&quot; scope=&quot;prototype&quot;/&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;bean id=&quot;service&quot; class=&quot;tk.hecks.spring.Service&quot; scope=&quot;prototype&quot;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/bean&gt;<br/>&lt;/beans&gt;<br/><br/>同样没有配置setSource，autowire改成 &quot;byType&quot;，配置文件会找实现了Source接口的bean,这里 tk.hecks.spring.DBCPSource 实现了Source接口，所以自动装配，如果没找到则不装配。<br/>如果同个配制文件中两个bean实现了Source接口，则报错。<br/>这里的 Type是指setSource(Source source)中参数的类型。<br/><br/><br/>具体spring bean的自动装配模式详解：<br/><br/>1、byName 是指通过bean的属性名字进行装配，在spring的xml文档中查找与要装配属性相同名称的bean进行装配。<br/><br/>2、byType 是指在spring 的xml中正好有一个与属性类型相同的bean进行自动装配。如果有多于一个这样的bean就抛出一个异常之处不能对那个bean使用自动装配功能。<br/><br/>3、constructor（构造方法）：是指根据构造方法中的参数在spring的xml文件中查找相匹配的bean,如果没找到则抛出异常。<br/><br/>4、autodect：通过对bean检查类内部来选择constructor或bytype方式进行注入，先找到constructor就用constructor ，如果没有constructor就用bytype。<br/><br/>5、no就是不使用自动装配。<br/><br/>bean的引用必须通过ref元素定义。很多大型应用不允许使用自动装配。因为它对于bean之间的<span style="color: #4169E1;">依赖参考关系不清晰</span>。<br/><br/><br/>三、<span style="color: #0000FF;">默认配置是no，推荐用这种，因以上自动装配，对维护不是太好。</span><br/>Tags - <a href="https://www.heckjj.com/tags/spring%25E4%25B8%25ADbean%25E8%2587%25AA%25E5%258A%25A8%25E8%25A3%2585%25E9%2585%258D/" rel="tag">spring中bean自动装配</a>
]]>
</description>
</item><item>
<link>https://www.heckjj.com/post//#blogcomment</link>
<title><![CDATA[[评论] spring中bean按照名称和类型自动装配]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>https://www.heckjj.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>