1. 程式人生 > >Spring之註解 @Autowired 註釋與@Resource註釋的區別

Spring之註解 @Autowired 註釋與@Resource註釋的區別

來公司也差不過一年了,因為公司是做支付的所以這一年的時間大部分的時間去關注了公司的業務,好像確實忽略了研究框架技術了。今天猛然間看到Spring中的某些註解我卻確實想不起來其中的用途了,這一篇僅以複習和學習Spring註解了!

@Resource篇

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方法之上

步驟:使用spring中的註解需要將註解開啟

使用註解的方式,我們需要修改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>

(1)@Resource
public class StudentService3 implements IStudentService {
//@Resource(name="studentDao")放在此處也是可行的
 private IStudentDao studentDao;
 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" />


@Autowired
使用Autowired時你的OrganDaoIbatis 必須以@Service或@Component註解才行。

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屬性,就只能按照名稱 裝配了.