@resource和@autowired的區別


首先先理解下: Spring中的byName與byType

1.首先,區分清楚什么是byType,什么是byName。

<bean id="userServiceImpl" class="cn.com.service.impl.UserServiceImpl" autowire="byName">
</bean>  
<bean id="userDao" class="cn.com.dao.impl.UserDaoImpl">
</bean>

比如說如上這段代碼,byName就是通過Bean的id或者name,byType就是按Bean的Class的類型。

若autowire="byType"意思是通過 class="cn.com.dao.impl.UserDaoImpl"來查找UserDaoImpl下所有的對象。

代碼autowire="byName"意思是通過id="userDao"來查找Bean中的userDao對象.

自動裝配 Bean 屬性

在spring中@Autowired注入規則:

1.@Autowired默認是按照byType進行注入的 

xml中語法如下:<bean id="beanId" class="包名.類名">

如果是屬性注入,需要為每一個依賴類創建相應的getter和setter方法。

如果是構造方法注入,需要為依賴類創建相應的構造方法。

屬性注入的語法如下:

<bean id="被注入的類的beanId" class="包名.類名" />
    <bean id="beanId" class="包名.類名">
       <property name="被注入的bean的名字" ref="被注入的類的beanId"></property>
</bean>

相同點:

@Resource的作用相當於@Autowired,均可標注在字段或屬性的setter方法上。

不同點:

(1)提供方:@Autowired是由org.springframework.beans.factory.annotation.Autowired提供,換句話說就是由Spring提供;@Resource是由javax.annotation.Resource提供,即J2EE提供,需要JDK1.6及以上。

(2)注入方式:@Autowired只按照byType 注入;@Resource默認按byName自動注入,也提供按照byType 注入;

(3)屬性:@Autowired按類型裝配依賴對象,默認情況下它要求依賴對象必須存在,如果允許null值,可以設置它required屬性為false。如果我們想使用按名稱裝配,可以結合@Qualifier注解一起使用。@Resource有兩個中重要的屬性:name和type。name屬性指定byName,如果沒有指定name屬性,當注解標注在字段上,即默認取字段的名稱作為bean名稱尋找依賴對象,當注解標注在屬性的setter方法上,即默認取屬性名作為bean名稱尋找依賴對象。需要注意的是,@Resource如果沒有指定name屬性,並且按照默認的名稱仍然找不到依賴對象時, @Resource注解會回退到按類型裝配。但一旦指定了name屬性,就只能按名稱裝配了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM