Spring依賴注入—@Resource注解使用


1.@Autowired默認按類型裝配(這個注解是屬於spring的),默認情況下必須要求依賴對象必須存在,如果要允許null 值,可以設置它的required屬性為false,如:@Autowired(required=false) ,如果我們想使用名稱裝配可以結合@Qualifier注解進行使用,如下: 

@Autowired() 
@Qualifier("baseDao") private BaseDao baseDao;


2.@Resource(這個注解屬於J2EE的),分為以下幾種情況
  1)默認安照名稱進行裝配,名稱可以通過name屬性進行指定
  如:
1  @Resource(name="student") //這里的student是指bean的ID 2     private Student student;

  2)如果沒有指定name屬性,當注解寫在字段上時,默認取字段名進行按照名稱查找
   如:
 @Resource()         //未指定name,默認取將要注入屬性的字段名,如下Student是類類型,student是屬性名也就是字段名 
    private Student student;

  
  3)如果注解寫在setter方法上默認取屬性名進行裝配。
  如:
    @Resource(name="student")  
    public void setStudent(Student student) {
        this.student = student;
    }

 



  4)當找不到與名稱匹配的bean時才按照類型進行裝配。
   如:
  java代碼如下:
    @Resource()   
    private Student student;

 

  spring.xml如下:

<bean id="student1" class="com.spring.chapter8.Student">
        <property name="name" value="張三"></property>
        <property name="age" value="23"></property>
    </bean>

在Spring.xml文件中並沒有student  的bean。當找不到與名稱匹配的bean時才按照類型進行裝配。我們運行也會成功。

 

但是需要注意的是,如果name屬性一旦指定,就只會按照名稱進行裝配。否則會報錯


運行結果如下:
spring.xml如下:


 java代碼如下:


運行結果:

 
        

總結:
  1.@Resource注解既可以用在setter中也可以用在屬性當中,當Resource指定屬性name名字時,就只會按照指定的name去查找bean,否則會報錯。

  2.當注解寫在字段上時,@Resource不指定name,默認取字段名進行按照名稱查找,如果注解寫在setter方法上默認取屬性名進行裝配。如果最后都找不到與名稱匹配的bean時才按照類型進行裝配。我們運行也會成功  
 3.推薦使用:@Resource注解在字段上,且這個注解是屬於J2EE的,減少了與spring的耦合。最重要的這樣代碼看起就比較優雅。
 


免責聲明!

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



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