43 lines
3.7 KiB
HTML
43 lines
3.7 KiB
HTML
|
<h4>@Resource</h4>
|
|||
|
<p>@Resource有两个常用属性name、type,所以分4种情况</p>
|
|||
|
<ol>
|
|||
|
<li>指定name和type:通过name找到唯一的bean,找不到抛出异常;如果type和字段类型不一致,也会抛出异常</li>
|
|||
|
<li>指定name:通过name找到唯一的bean,找不到抛出异常</li>
|
|||
|
<li>指定type:通过tpye找到唯一的bean,如果不唯一,则抛出异常:NoUniqueBeanDefinitionException</li>
|
|||
|
<li>都不指定:通过字段名作为key去查找,找到则赋值;找不到则再通过字段类型去查找,如果不唯一,则抛出异常:NoUniqueBeanDefinitionException</li>
|
|||
|
<li>由J2EE提供,默认按照byName自动注入</li>
|
|||
|
</ol>
|
|||
|
<div>
|
|||
|
<div>
|
|||
|
<p>@Resource装配顺序:</p>
|
|||
|
<p>(1)如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常</p>
|
|||
|
<p>(2)如果指定了name,则从Spring上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常</p>
|
|||
|
<p>(3)如果指定了type,则从Spring上下文中找到类型匹配的唯一bean进行装配,找不到或找到多个,都抛出异常</p>
|
|||
|
<p>(4)如果既没指定name,也没指定type,则自动按照byName方式进行装配。如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配。</p>
|
|||
|
<p>@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入。</p>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<h4><a id="Autowired_11"></a>@Autowired</h4>
|
|||
|
<p>@Autowired由Spring提供,只按照byType注入</p>
|
|||
|
<p>@Autowired只有一个属性required,默认值为true,为true时,找不到就抛异常,为false时,找不到就赋值为null</p>
|
|||
|
<p>@Autowired按类型查找,如果该类型的bean不唯一,则抛出异常;可通过组合注解解决<code>@Autowired()@Qualifier("baseDao")</code></p>
|
|||
|
<h4><a id="_18"></a>相同点</h4>
|
|||
|
<ol>
|
|||
|
<li>Spring都支持</li>
|
|||
|
<li>都可以作用在字段和setter方法上</li>
|
|||
|
</ol>
|
|||
|
<h4><a id="_24"></a>不同点</h4>
|
|||
|
<ol>
|
|||
|
<li>Resource是JDK提供的,而Autowired是Spring提供的</li>
|
|||
|
<li>Resource不允许找不到bean的情况,而Autowired允许(<code>@Autowired(required = false)</code>)</li>
|
|||
|
<li>指定name的方式不一样,<code>@Resource(name = "baseDao")</code>,<code>@Autowired()@Qualifier("baseDao")</code></li>
|
|||
|
<li>Resource默认通过name查找,而Autowired默认通过type查找</li>
|
|||
|
</ol>
|
|||
|
<div>
|
|||
|
<div>
|
|||
|
<p>(1)@Autowired与@Resource都可以用来装配bean,都可以写在<strong>字段</strong>或<strong>setter</strong>方法上</p>
|
|||
|
<p>(2)<strong>@Autowired默认按类型装配</strong>,默认情况下必须要求依赖对象存在,如果要<strong>允许null值</strong>,可以设置它的<strong>required属性</strong>为<strong>false</strong>。如果想<strong>使用名称装配</strong>可以<strong>结合@Qualifier注解</strong>进行使用。</p>
|
|||
|
<p>(3)<strong>@Resource</strong>,<strong>默认按照名称</strong>进行装配,名称可以通过<strong>name属性</strong>进行指定,如果没有指定name属性,当注解写在<strong>字段上</strong>时,<strong>默认取字段名</strong>进行名称查找。如果注解写在setter方法上默认取属性名进行装配。当<strong>找不到与名称匹配的bean</strong>时<strong>才按照类型</strong>进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。</p>
|
|||
|
<p>推荐使用@Resource注解在字段上,这样就不用写setter方法了,并且这个注解是属于J2EE的,减少了与Spring的耦合。</p>
|
|||
|
</div>
|
|||
|
<br /><br /><br />转自:https://www.jianshu.com/p/a74707581ffa<br />转自:https://blog.csdn.net/balsamspear/article/details/87936936</div>
|