1. 程式人生 > >Spring @Resource、@Autowired、@Qualifier的註解注入及區別

Spring @Resource、@Autowired、@Qualifier的註解注入及區別

spring2.5提供了基於註解(Annotation-based)的配置,我們可以通過註解的方式來完成注入依賴。在Java程式碼中可以使用 @Resource或者@Autowired註解方式來經行注入。雖然@Resource和@Autowired都可以來完成注入依賴,但它們之間是有區 別的。首先來看一下:

 a。@Resource預設是按照名稱來裝配注入的,只有當找不到與名稱匹配的bean才會按照型別來裝配注入;

 b。@Autowired預設是按照型別裝配注入的,如果想按照名稱來轉配注入,則需要結合@Qualifier一起使用;

 c。@Resource註解是又J2EE提供,而@Autowired是由Spring提供,故減少系統對spring的依賴建議使用  

       @Resource的方式;

d。 @Resource和@Autowired都可以書寫標註在欄位或者該欄位的setter方法之上

2、使用註解的方式,我們需要修改spring配置檔案的頭資訊,修改部分紅色標註,如下

   <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"


       xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
              
<context:annotation-config/>
    
</beans>

3、修改以上配置檔案的頭資訊後,我們就可以在Java程式碼通過註解方式來注入bean,看下面程式碼

(1)@Resource

public class StudentService3 implements IStudentService {


private String id;


public void setId(String id) {
this.id = id;
}

 @Resource(name="studentDao") // 通過此註解完成從spring配置檔案中查詢名稱為studentDao的bean來裝配欄位studentDao,如果spring配置檔案中不存在 studentDao名稱的bean則轉向按照bean型別經行查詢
 public void setStudentDao(IStudentDao studentDao) {
this.studentDao = studentDao;
}


public void saveStudent() {
studentDao.saveStudent();
System.out.print(",ID 為:"+id);
}


}

配置檔案新增如下資訊

  <bean id="studentDao" class="com.wch.dao.impl.StudentDao"></bean>
<bean id="studentService3" class="com.wch.service.impl.StudentService3" />

(2)@Autowired

public class StudentService3 implements IStudentService {

  //@Autowired放在此處也是可行的
    private IStudentDao studentDao;


private String id;


public void setId(String id) {
this.id = id;
}

 @Autowired//通過此註解完成從spring配置檔案中 查詢滿足studentDao型別的bean

  //@Qualifier("studentDao")則按照名稱經行來查詢轉配的
 public void setStudentDao(IStudentDao studentDao) {
this.studentDao = studentDao;
}


public void saveStudent() {
studentDao.saveStudent();
System.out.print(",ID 為:"+id);
}


}

配置檔案新增如下資訊

  <bean id="studentDao" class="com.wch.dao.impl.StudentDao"></bean>
<bean id="studentService3" class="com.wch.service.impl.StudentService3" />

在java程式碼中可以使用@Autowire或者@Resource註解方式進行裝配,這兩個註解的區別是:
@Autowire 預設按照型別裝配,預設情況下它要求依賴物件必須存在如果允許為null,可以設定它required屬性為false,如果我們想使用按照名稱裝配,可 以結合@Qualifier註解一起使用;


@Resource預設按照名稱裝配,當找不到與名稱匹配的bean才會按照型別裝配,可以通過name屬性指定,如果沒有指定name屬 性,當註解標註在欄位上,即預設取欄位的名稱作為bean名稱尋找依賴物件,當註解標註在屬性的setter方法上,即預設取屬性名作為bean名稱尋找 依賴物件.

注意:如果沒有指定name屬性,並且按照預設的名稱仍然找不到依賴的物件時候,會回退到按照型別裝配,但一旦指定了name屬性,就只能按照名稱 裝配了.

相關推薦

Spring @Resource@Autowired@Qualifier註解注入區別

spring2.5提供了基於註解(Annotation-based)的配置,我們可以通過註解的方式來完成注入依賴。在Java程式碼中可以使用 @Resource或者@Autowired註解方式來經行注入。雖然@Resource和@Autowired都可以來完成注入依賴,但它

@Resource@Autowired@Qualifier註解注入區別

在Java程式碼中可以使用 @Resource  或者 @Autowired 註解方式來進行注入。 雖然 @Resource 和 @Autowried 都可以完成依賴注入,但是他們是有區別的。 @Resource 預設是按照名稱來裝配注入的,只有當找不到與名稱匹配的b

@Resource @Autowired註解注入區別

@Resource @Autowired的註解注入及區別   @[email protected]在Spring中常用來裝配物件。兩種方法的不同:   (1) 提供方不同:@Autowired是由org.springframework.beans.f

終極講解,看了立馬懂 --》Spring註解@Component@Repository@Service@Controller @Resource@Autowired@Qualifier 解析

我們在使用spring的時候經常會用到這些註解,那麼這些註解到底有什麼區別呢。我們先來看程式碼 同樣分三層來看: Action 層: package com.ulewo.ioc; import org.springframework.beans.factory.annotation.Autowired; i

Spring註解@Component@Repository@Service@Controller @Resource@Autowired@Qualifier 解析

Spring註解@Component、@Repository、@Service、@Controller @Resource、@Autowired、@Qualifier 解析 我們在使用spring的時候經常會用到這些註解,那麼這些註解到底有什麼區別呢。我們先來

從零寫Spring註解版框架系列 IoC篇 (2)實現 @Component@Autowired@Qualifier註解

本文承接了上一篇文章的思路進行程式碼實現,並搭建起一個基本可用的基於@Component、@Autowired、@Qualifier 註解的 IoC 框架。 專案 Github 地址為:https://github.com/linshenkx/winter-core 相關文章地址:從

SpringMVC註解@Autowired和@Qualifier 自動注入[根據型別注入] @Autowired 可以對成員變數方法以及建構函式進行註釋, @Qualifier

@Autowired和@Qualifier  自動注入[根據型別注入]     @Autowired 可以對成員變數、方法以及建構函式進行註釋,     @Qualifier 的標註物件是成員變數、方法入參、建構函式入參。     ps:兩者結合使用相當於@Resource

Spring中@Resource與@Autowired@Qualifier的用法與區別

-h 進行 如果 註解 tool j2e vat 裝配 light 1、@Autowired與@Resource都可以用來裝配bean. 都可以寫在字段上,或寫在setter方法上。 2、@Autowired默認按類型裝配(這個註解是屬業spring的),默認情況下必須要求

Spring學習----自動裝配@Resource@Autowired@Qualifier

pre 多個 註入 cat text spring學習 文件 oid resource 直接看下面的代碼即可明白: applicationContext.xml裏面添加個bean: <!--註解的註入 --> <bean id="stude

@Resource@Autowired@Qualifier

原始類型 對象 spring j2e bean pan 裝配 比較 wire @Resource註解是由J2EE提供,而@Autowired是由Spring提供 1. @Resource @Resource默認是按照名稱來裝配註入的,只有當找不到與名稱匹配的bean才會按照

[java][spring]取得通過配置檔案和註解注入的bean取得當前資料庫連線取得ApplicationContext的方法

[spring]取得通過配置檔案和註解注入的bean、取得當前資料庫連線、取得ApplicationContext的方法 1、思路: 應用程式啟動時使用ApplicationContextAware讓Spring容器傳遞自己生成的ApplicationContext給我們,

spring中Constructor@Autowired@PostConstruct的順序

註入 自動 img 成對 .com 使用 struct ron autowire 依賴註入: 從字面意思就可以知道,要將對象B註入到對象A,那麽首先就必須得生成對象B與對象A,才能執行註入。 所以,如果一個類A中有個成員變量B被@Autowired註解,那麽@Autowir

spring中Constructor@Autowired@PostConstruct的順序【轉】

auto bbb 構造 () article lan csdn 初始 ons 其實從依賴註入的字面意思就可以知道,要將對象p註入到對象a,那麽首先就必須得生成對象p與對象a,才能執行註入。所以,如果一個類A中有個成員變量p被@Autowired註解,那麽@Autowired

Spring 實現執行緒介面 Runnable 註解注入失敗 @Resource annotation is not supported on static fields

原因就是spring和多執行緒安全的問題,不讓注入 解決方案有以下幾種 一.變數字首加static,生成set方法並加上@Resource,記住把set方法 static 去掉,否則會丟擲 @Resource annotation is not supported on static f

ControllerServiceDaoAutowiredRequestMappingResponseBodyScope註解

Controller:控制層; Service:服務層; Dao:持久層; Autowired:自動注入; RequestMapping:請求對映 如: @RequestMapping("/showitem/{itemId}")     publ

@resource@Autowired@Service在一個接口多個實現類中的應用

imp pri tail 簡單 編程 接口 qualifier 示例 .net Spring在沒有引入註解之前,傳統的Spring做法是使用.xml文件來對bean進行註入,所有的內容都需要配置在.xml文件中,使配置和編程分離,卻增加了可讀性和復雜度。

spring這種@Resource或者@Autowired這種如何去注入bean

     對於這個,我是簡單寫一點,之前看spring的原始碼中,對於bean的定義的封裝中,我們發現其中用到了反射中的很多內容,簡單的做了一個dome模擬這個沒有set也沒有構造方法的注入:   首先如下:public class User {    private Str

spring註解AutowiredQualifier註解的講解。很具體

傳統的Spring做法是使用.xml檔案來對bean進行注入或者是配置aop、事物,這麼做有兩個缺點: 1、如果所有的內容都配置在.xml檔案中,那麼.xml檔案將會十分龐大;如果按需求分開.xml檔案,那麼.xml檔案又會非常多。總之這將導致配置檔案的可讀性與可維護性變得很

@resource@Autowired@Service在一個介面多個實現類中的應用

      Spring在沒有引入註解之前,傳統的Spring做法是使用.xml檔案來對bean進行注入,所有的內容都需要配置在.xml檔案中,使配置和程式設計分離,卻增加了可讀性和複雜度。        Spring註解將複雜的配置檔案用簡單@xxx代替,當出現一個介

spring之註釋@Autowired@Resourse

java框架–Spring入門2 註釋@Autowired、@Resourse 延續上一篇部落格的程式碼。。。這次我們修改下,先測試一下Autowired是怎麼用的 先來修改一下配置檔案,加入一句話context:annotation-config