Spring——自動裝配的三種實現方式
阿新 • • 發佈:2020-07-28
-
spring會在上下文中自動尋找,並自動給bean裝配屬性
-
自動裝配的三種方式
(1).在xml中顯式的裝配
(2).在java中顯式的裝配
(3).隱式的自動裝配bean
這裡主要講第三種
1.測試環境搭建
public class Cat {
public void bark(){
System.out.println("miao...");
}
}
public class Dog { public void bark(){ System.out.println("wang..."); } }
public class People {
Cat cat;
Dog dog;
public Cat getCat() {
return cat;
}
public void setCat(Cat cat) {
this.cat = cat;
}
public Dog getDog() {
return dog;
}
public void setDog(Dog dog) {
this.dog = dog;
}
}
2.byName:會自動在容器上下文中,通過set方法中的引數名 去查詢相同id的<bean>
<bean id="dog" class="com.guan.bean.Dog"></bean>
<bean id="cat" class="com.guan.bean.Cat"></bean>
<bean id="people" class="com.guan.bean.People" autowire="byName"></bean>
3.byType:會自動在容器上下文中,通過自己物件屬性 型別相同的bean
<bean id="dog" class="com.guan.bean.Dog"></bean>
<bean id="cat" class="com.guan.bean.Cat"></bean>
<bean id="people" class="com.guan.bean.People" autowire="byType"></bean>
注意
- byName需要保證
<bean>
的id唯一 - byType需要保證
<bean>
的type唯一
4.使用註解實現自動裝配
使用:
-
匯入約束
-
配置註解的支援
<?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 https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> <context:annotation-config/> </beans>
常用註解:
-
@Autowired:需要配置spring,直接在屬性上使用.先使用byType,再使用byName?
required(default true):預設不需Null
public class People { @Autowired Cat cat; @Autowired Dog dog; }
@Qualifier:當屬性名和容器中
<bean>
中的id不同時,可以通過該註解為屬性"起別名"public class People { @Autowired @Qualifier("cat12") Cat cat; @Autowired Dog dog; }
-
@Resource:jdk註解
name:用於起別名
區別:
-
實現方式:
(1).@Autoword先通過byType實現,如果有重複再通過byName,而且預設要求物件存在
表現:同一個型別,不同名稱,
<bean id="dog123" class="com.guan.bean.Dog"></bean>
,可以匹配;同一個名稱,型別不匹配時,<bean id="dog" class="com.guan.bean.Cat"></bean>
,如果只要一個對應的型別可以自動匹配,如果有多個對應的型別會報錯(2).@Resource預設通過byName實現,如果找不到name,才通過byType,否則報錯
表現:如果有一個同名的不同型別
<bean id="cat" class="com.guan.bean.Dog"></bean>
,會直接報錯對應的型別不匹配;如果有一個同類型的,但是不同名的,可以匹配;如果有多個同類型且不同名,無法匹配
總結:實際上xml檔案中一般存放的核心配置檔案,一般的配置可以用其它方式