1. 程式人生 > >spring依賴注入--手動裝配

spring依賴注入--手動裝配

java程式碼中使用@Autowired@Resource註解方式進行裝配

1.Teacher

2.Student

3.spring-config.xml檔案

<?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.xsd
         http://www.springframework.org/schema/context
         http://www.springframework.org/schema/context/spring-context.xsd">
     <context:annotation-config/>
     
     <bean id="student" class="com.hzyc.springlearn.Student">
     	<property name="name" value="LiLei"></property>
     </bean>
     <bean id="teacher" class="com.hzyc.springlearn.Teacher">
    	<property name="name" value="Mr.Zhang"></property>
     </bean>
</beans>

這兩個註解的區別是:@Autowired 預設按型別裝配,@Resource預設按名稱裝配,當找不到與名稱匹配的bean才會按型別裝配。

@Autowired註解是按型別裝配依賴物件,預設情況下它要求依賴物件必須存在,如果允許null值,可以設定它required屬性為false。如果我們想使用按名稱裝配,可以結合@Qualifier註解一起使用。如下:

    @Autowired  @Qualifier(“teacher)

    private Teacher tea;

@Resource註解和

@Autowired一樣,也可以標註在欄位或屬性的setter方法上,但它預設按名稱裝配。名稱可以通過@Resourcename屬性指定,如果沒有指定name屬性,當註解標註在欄位上,即預設取欄位的名稱作為bean名稱尋找依賴物件,當註解標註在屬性的setter方法上,即預設取屬性名作為bean名稱尋找依賴物件。

    @Resource(name=“teacher”)

    private Teacher tea;//用於欄位上

注意:如果沒有指定name屬性,並且按照預設的名稱仍然找不到依賴物件時, @Resource

註解會回退到按型別裝配。但一旦指定了name屬性,就只能按名稱裝配了