最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring成員對(duì)象注入的三種方式詳解

 更新時(shí)間:2022年02月28日 15:54:12   作者:盛世如戀  
這篇文章主要為大家詳細(xì)介紹了Spring成員對(duì)象注入的三種方式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

當(dāng)一個(gè)類運(yùn)行需要調(diào)用一個(gè)成員對(duì)象,成員對(duì)象也是被容器類托管的類對(duì)象時(shí),則可以用依賴注入創(chuàng)建成員對(duì)象。讓容器類來幫你創(chuàng)建成員對(duì)象。

官網(wǎng)鏈接:Annotation-based Container Configuration

前置:

容器類AppConfig

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan
public class AppConfig {

}

創(chuàng)建一個(gè)接口Hello

public interface Hello {
    
    void HelloWorld();
    
}

創(chuàng)建一個(gè)類HelloImpl1實(shí)現(xiàn)接口Hello。并且被容器托管

import org.springframework.stereotype.Component;

@Component
public class HelloImpl1 implements Hello{
    @Override
    public void HelloWorld() {
        System.out.println("HelloWorld1");
    }
}

一、@Autowired注解

在聲明成員變量上加上@Autowires注解。讓容器來幫忙創(chuàng)建對(duì)象。該成員變量也必須被容器類托管。

創(chuàng)建MyHello類,里面有Hello成員對(duì)象。如下所示:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class MyHello {
    @Autowired
    Hello h;

    void say(){
        h.HelloWorld();
    }
}

如果不加@Autowired運(yùn)行say()會(huì)報(bào)錯(cuò)。

進(jìn)行測試:

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Test {
    public static void main(String[] args) {
        ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
        MyHello mh = ac.getBean("myHello",MyHello.class);
        mh.say();
    }
}

運(yùn)行結(jié)果:

在這里插入圖片描述

如果成員對(duì)象是接口,并且有多個(gè)實(shí)現(xiàn)類。則需要使用@Qualifier或者@Primary注解。

在創(chuàng)建一個(gè)類實(shí)現(xiàn)Hello接口。

import org.springframework.stereotype.Component;

@Component
public class HelloImol2 implements Hello{
    @Override
    public void HelloWorld() {
        System.out.println("HelloWorld2");
    }
}

這時(shí),Hello接口有兩個(gè)實(shí)現(xiàn)類。

再次運(yùn)行Test類,報(bào)錯(cuò)。因?yàn)檎{(diào)用類有沖突。

在這里插入圖片描述

解決方案有兩種。

@Qualifier

@Autowired下加入@Qualifier(value="id名") 。id名默認(rèn)是類名且首字母小寫。要指定是調(diào)用實(shí)現(xiàn)接口中的哪個(gè)類。

如上述解決:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

@Component
public class MyHello {
    @Autowired
    @Qualifier(value="helloImpl1") //添加此注解
    Hello h;

    void say(){
        h.HelloWorld();
    }


}

在這里插入圖片描述

@Primary

在想要用到的多個(gè)實(shí)現(xiàn)接口對(duì)象中的其中一個(gè)類,加上@Primary注解

如: 我想通過Hello運(yùn)行HelloImpl1。則在HelloImpl加上@Primary注解:

import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;

@Component
@Primary
public class HelloImpl1 implements Hello{
    @Override
    public void HelloWorld() {
        System.out.println("HelloWorld1");
    }
}

Test類運(yùn)行成功

在這里插入圖片描述

二、@Resource注解

在成員對(duì)象上加入@Resource(name="id名") id名為你想要調(diào)用這個(gè)接口中實(shí)現(xiàn)的哪個(gè)類的類名且首字母小寫。

則上述的MyHello類可寫成:

import org.springframework.stereotype.Component;

import javax.annotation.Resource;

@Component
public class MyHello {
    @Resource(name="helloImpl1")
    Hello h;

    void say(){
        h.HelloWorld();
    }


}

運(yùn)行Test類

在這里插入圖片描述

三、@Inject 和 @Named注解

使用這兩個(gè)注解需要導(dǎo)入坐標(biāo)。在pom.xml加入

<dependency>
            <groupId>javax.inject</groupId>
            <artifactId>javax.inject</artifactId>
            <version>1</version>
</dependency>

兩個(gè)注解一起用在需要?jiǎng)?chuàng)建成員對(duì)象上。其中@Named("id名")id名為你想要調(diào)用這個(gè)接口中實(shí)現(xiàn)的哪個(gè)類的類名且首字母小寫。

則上述的MyHello類可以修改為:

import org.springframework.stereotype.Component;
import javax.inject.Inject;
import javax.inject.Named;

@Component
public class MyHello {

    @Inject
    @Named("helloImpl1")
    Hello h;

    void say(){
        h.HelloWorld();
    }


}

繼續(xù)運(yùn)行Test類,仍然可以運(yùn)行成功

在這里插入圖片描述

上述也可以實(shí)現(xiàn)set方法的依賴注入,需要保證傳入的參數(shù)被容器托管。

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!    

相關(guān)文章

最新評(píng)論

通辽市| 财经| 新营市| 凉山| 罗山县| 怀化市| 城口县| 武功县| 鄂尔多斯市| 如皋市| 阳信县| 五指山市| 西和县| 永善县| 镇安县| 大方县| 治多县| 甘肃省| 四会市| 磐石市| 二连浩特市| 黔江区| 大田县| 兴城市| 错那县| 九江市| 台北市| 怀远县| 巴彦淖尔市| 娱乐| 连平县| 龙胜| 荥经县| 喀喇沁旗| 遂平县| 榆树市| 商洛市| 怀宁县| 六枝特区| 吴江市| 九寨沟县|