基於@Autowierd(自動裝配)的使用說明

@Autowierd(自動裝配)的使用

@Autowired 是一個註釋,它可以對類成員變量、方法及構造函數進行標註,讓 spring 完成 bean 自動裝配的工作。

一、介紹@Autowierd自動裝配之前我們需要先瞭解何為裝配?

首先我們來看最原生態的裝配,以一個人分別養瞭貓和狗為例,我們先分別為貓和狗進行實例化:

    <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>

以上就是裝配,所謂的屬性註入

但是我們知道,如果是手動註入的屬性的話,一旦屬性數量多的話會顯得很繁瑣,這時候自動裝配的作用就體現出來瞭

二、@Autowierd自動裝配的使用

第一步,使用@Autowierd註釋需要在配置文件中開啟註解支持

        <!--開啟註解的支持-->
        <context:annotation-config/>

但是相應的需要在配置文件中加入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註釋即可實現自動裝配

    @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自動裝配的環境比較復雜,自動裝配無法通過一個註解@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沒有放在標註瞭@Configuration這個註解的類下。

2.SpringBoot啟動類沒有開啟掃描

@ComponentScan(value = {"com.bihang"})

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: