Spring使用注解實現(xiàn)Bean的自動裝配
一、利用注解方式注入屬性

<?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>
如果在已有的配置文件中附加
在spring配置文件中引入context文件頭
xmlns:context="http://www.springframework.org/schema/context" http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
開啟屬性注解支持!
<context:annotation-config/>
二、@Autowired
@Autowired是按類型自動裝配的,不支持id匹配demo測試: 將User類中的set方法去掉,使用@Autowired注解
public class People {
@Autowired
private Cat cat;
@Autowired
private Dog dog;
private String name;
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;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
此時配置文件內(nèi)容
<context:annotation-config/> <bean id="cat" class="com.lding.pojo.Cat"></bean> <bean id="dog" class="com.lding.pojo.Dog"></bean> <bean id="people" class="com.lding.pojo.People"></bean>
測試成功
@Autowired(required=false) false,對象可以為null;true,對象必須存對象,不能為null。
//如果允許對象為null,設(shè)置required = false,默認為true @Autowired(required = false) private Cat cat;
三、@Qualifier
@Autowired是根據(jù)類型自動裝配的,加上@Qualifier則可以根據(jù)byName的方式自動裝配
@Qualifier不能單獨使用。
demo測試
配置文件修改內(nèi)容,保證類型存在對象。且名字不為類的默認名字!
<bean id="dog1" class="com.lding.pojo.Dog"/> <bean id="dog2" class="com.lding.pojo.Dog"/> <bean id="cat1" class="com.lding.pojo.Cat"/> <bean id="cat2" class="com.lding.pojo.Cat"/>
沒有加Qualifier測試,直接報錯在屬性上添加Qualifier注解
@Autowired @Qualifier(value = "cat2") private Cat cat; @Autowired @Qualifier(value = "dog2") private Dog dog;
測試 ,成功輸出
四、@Resource
@Resource如有指定的name屬性,先按該屬性進行byName方式查找裝配;
其次再進行默認的byName方式進行裝配(默認的byName方式就是查找set后屬性的小寫名字);
如果以上都不成功,則按byType的方式自動裝配
都不成功,則報異常。
demo測試
實體類
public class User {
//如果允許對象為null,設(shè)置required = false,默認為true
@Resource(name = "cat2")
private Cat cat;
@Resource
private Dog dog;
private String str;
}
beans.xml
<bean id="dog" class="com.lding.pojo.Dog"/> <bean id="cat1" class="com.lding.pojo.Cat"/> <bean id="cat2" class="com.lding.pojo.Cat"/> <bean id="user" class="com.lding.pojo.User"/>
測試:結(jié)果ok
配置文件2:beans.xml , 刪掉cat2
<bean id="dog" class="com.lding.pojo.Dog"/> <bean id="cat1" class="com.lding.pojo.Cat"/>
@Resource private Cat cat; @Resource private Dog dog;
結(jié)果:OK
結(jié)論:先進行byName查找,失敗;再進行byType查找,成功。
總結(jié)
@Autowired與@Resource異同:
@Autowired與@Resource都可以用來裝配bean。都可以寫在字段上,或?qū)懺趕etter方法上。
@Autowired默認按類型裝配(byType),如果我們想使用名稱裝配(byName)可以結(jié)合@Qualifier注解進行使用
@Resource(屬于J2EE復(fù)返),默認按照名稱進行裝配,名稱可以通過name屬性進行指定。如果沒有指定name屬性,當注解寫在字段上時,默認取字段名進行按照名稱查找,如果注解寫在setter方法上默認取屬性名進行裝配。 當找不到與名稱匹配的bean時才按照類型進行裝配。但是需要注意的是,如果name屬性一旦指定,就只會按照名稱進行裝配。
它們的作用相同都是用注解方式注入對象,但執(zhí)行順序不同。@Autowired先byType,@Resource先byName。
到此這篇關(guān)于Spring使用注解實現(xiàn)Bean的自動裝配的文章就介紹到這了,更多相關(guān)Spring Bean自動裝配內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring MVC學習教程之RequestMappingHandlerAdapter詳解
這篇文章主要給大家介紹了關(guān)于Spring MVC學習教程之RequestMappingHandlerAdapter的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧2018-11-11
如何在Spring?Boot中使用MyBatis訪問數(shù)據(jù)庫
MyBatis可以通過簡單的XML或者注解來配置和映射原始類型,接口,和Java POJO為數(shù)據(jù)庫中記錄,使用MyBatis幫助我們解決各種問題,本文介紹如何在Spring?Boot中使用MyBatis訪問數(shù)據(jù)庫,感興趣的朋友一起看看吧2023-11-11
Java使用選擇排序法對數(shù)組排序?qū)崿F(xiàn)代碼
這篇文章主要介紹了Java使用選擇排序法對數(shù)組排序?qū)崿F(xiàn)代碼,需要的朋友可以參考下2014-02-02
Maven中Could not find artifact XXXX的錯誤解決
本文主要介紹了Maven中Could not find artifact XXXX的錯誤解決,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03
Java套接字(Socket)網(wǎng)絡(luò)編程入門
這篇文章主要介紹了Java套接字(Socket)網(wǎng)絡(luò)編程入門,Socket可以理解為是對TCP/IP協(xié)議的抽象,需要的朋友可以參考下2015-10-10
Spring Boot使用AOP在指定方法執(zhí)行完后執(zhí)行異步處理操作
這篇文章主要介紹了Spring Boot使用AOP在指定方法執(zhí)行完后執(zhí)行異步處理操作,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下2024-06-06

