基于@Autowierd(自動裝配)的使用說明
@Autowierd(自動裝配)的使用
@Autowired 是一個注釋,它可以對類成員變量、方法及構(gòu)造函數(shù)進行標(biāo)注,讓 spring 完成 bean 自動裝配的工作。
一、介紹@Autowierd自動裝配之前我們需要先了解何為裝配?
首先我們來看最原生態(tài)的裝配,以一個人分別養(yǎng)了貓和狗為例,我們先分別為貓和狗進行實例化:
<bean id="cat" class="com.spring05.pojo.Cat"/> <bean id="dog" class="com.spring05.pojo.Dog"/>
由于person類的屬性中帶有貓和狗,所以我們需要將貓和狗的實體類注入人的實體類中:
<bean id = "Person" class="com.spring05.pojo.Person"> <property name="dog" ref="dog"/> <property name="cat" ref="cat"/> </bean>
以上就是裝配,所謂的屬性注入
但是我們知道,如果是手動注入的屬性的話,一旦屬性數(shù)量多的話會顯得很繁瑣,這時候自動裝配的作用就體現(xiàn)出來了
二、@Autowierd自動裝配的使用
第一步,使用@Autowierd注釋需要在配置文件中開啟注解支持
<!--開啟注解的支持--> <context:annotation-config/>
但是相應(yīng)的需要在配置文件中加入context約束:
xmlns:context="http://www.springframework.org/schema/context" http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
接下來就是注解的使用了,@Autowierd注釋的使用只需要在Person類中的屬性上加上一個@Autowierd注釋即可實現(xiàn)自動裝配
@Autowired private Cat cat; @Autowired private Dog dog;
自動裝配完了之后在spring容器中注冊person類時就不需要在對person類的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/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!--開啟注解的支持--> <context:annotation-config/> <bean id="cat" class="com.spring05.pojo.Cat"/> <bean id="dog" class="com.spring05.pojo.Dog"/> <bean id="Person" class="com.spring05.pojo.Person"/> </beans>
除了@Autowierd之外還需要介紹@Resource注釋,@Resource注釋與@Autowierd功能相同,@Resource甚至包括了@Autowierd
三、使用注解@Autowierd的"搭檔"@Qualifier
如果@Autowired自動裝配的環(huán)境比較復(fù)雜,自動裝配無法通過一個注解@Autowired來完成時,我們可以使用@Qualifier(value= “xxx”)去配合@Autowired的使用,指定一個唯一的bean對象注入:
@Autowired @Qualifier(value = "cat") private Cat cat; @Autowired @Qualifier(value = "dog") private Dog dog;
四、注意事項
1、使用Autowired我們可以省略set方法,但是使用注解的前提是裝配的屬性必須在IOC容器中存在,且符合名字byname
2、如果定義了@Autowired的required屬性為false,說明這個對象可以為空,否則不允許為空:
@Autowired(required = false)
3、不僅僅只有通過注釋可以自動裝配,還可以通過ByName和ByType來自動裝配:
<bean id="Person" class="com.spring05.pojo.Person" autowire="byType"/> <bean id="Person" class="com.spring05.pojo.Person" autowire="byName"/>
SpringBoot的Autowierd失敗
通常是以下幾種可能:
1.沒有加@Service注解,或者是這個bean沒有放在標(biāo)注了@Configuration這個注解的類下。
2.SpringBoot啟動類沒有開啟掃描
@ComponentScan(value = {"com.bihang"})
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java 自旋鎖(spinlock)相關(guān)知識總結(jié)
這篇文章主要介紹了Java 自旋鎖(spinlock)相關(guān)知識總結(jié),幫助大家更好的理解和使用Java,感興趣的朋友可以了解下2021-02-02淺析Java如何優(yōu)雅的設(shè)計接口狀態(tài)碼和異常
HTTP協(xié)議里定義了一系列的狀態(tài)碼用來表明請求的狀態(tài),如常用的200表示請求正常,404表示請求的資源不存在,所以本文就來和大家討論一下如何優(yōu)雅的設(shè)計接口狀態(tài)碼和異常,感興趣的可以了解下2024-03-03springboot+zookeeper實現(xiàn)分布式鎖的示例代碼
本文主要介紹了springboot+zookeeper實現(xiàn)分布式鎖的示例代碼,文中根據(jù)實例編碼詳細(xì)介紹的十分詳盡,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03詳解Spring boot+CXF開發(fā)WebService Demo
這篇文章主要介紹了詳解Spring boot+CXF開發(fā)WebService Demo,非常具有實用價值,需要的朋友可以參考下2017-05-05