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

Spring實(shí)現(xiàn)對象注入的三種方法詳解

 更新時(shí)間:2023年07月28日 09:58:10   作者:摸魚王胖嘟嘟  
這篇文章主要為大家學(xué)習(xí)介紹了Spring中實(shí)現(xiàn)對象注入的三種常用方法,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的可以了解一下

1.屬性注入

屬性注?是使? @Autowired 實(shí)現(xiàn)的,將 Service 類注?到 Controller 類中。

package com.java.demo.dao;
import org.springframework.stereotype.Repository;
@Repository
public class UserRepository {
    public int add() {
        System.out.println("Do UserRepository add method.");
        return 1;
    }
}
package com.java.demo.service;
import com.java.demo.dao.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Service;
@Service
public class UserService {
    // 1. 屬性注入
    @Autowired // DI(依賴注入)
    private UserRepository userRepository;
    public int add() {
        System.out.println("Do UserService add method.");
        // 傳統(tǒng)寫法
//        UserRepository userRepository = new UserRepository();
//        return userRepository.add();
        // Spring V1.0
//        ApplicationContext context =
//                new ClassPathXmlApplicationContext("spring-config.xml");
//        UserRepository userRepository = context.getBean("userRepository",UserRepository.class);
//
//        return userRepository.add();
        // Spring V2.0
        return userRepository.add();
    }
}

依賴注入 VS 依賴查找

-依賴查找依賴 Bean

-@Autowired 依賴注入流程:首先先根據(jù)getType(從容器中)獲取對象,如果只獲取一個(gè),那么直接將此對象注入到當(dāng)前屬性上;如果獲取到多個(gè)對象,才會使用getName(根據(jù)名稱)進(jìn)行匹配。

問題:同類型的Bean存儲到容器多個(gè),獲取時(shí)報(bào)錯(cuò)的問題

解決方案:

1.將屬性的名字和Bean的名字對應(yīng)上。

2.使用@AutoWired+@Qualifier來篩選bean對象;

屬性注入優(yōu)缺點(diǎn)

優(yōu)點(diǎn):使用簡單。

缺點(diǎn):

a)無法注入一個(gè)不可變的變量(final修飾的變量)

b)只適用于IoC容器。

c)更容易違背單一設(shè)計(jì)原則,因?yàn)槭褂闷饋肀容^簡單。

2.Setter注入

package com.java.demo.service;
import com.java.demo.dao.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserService3 {
    private UserRepository userRepository;
    @Autowired
    public void setUserRepository(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
    public void sayHi() {
        System.out.println("Do UserService3 sayHi.");
        userRepository.add();
    }
}

Setter注入優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

通常Setter只set一個(gè)屬性,所以Setter注入更符合單一設(shè)計(jì)原則

缺點(diǎn):

a)無法注入一個(gè)final修飾的變量;

b)Setter注入的對象可以被修改。Setter本生就是一個(gè)方法,既然是一個(gè)方法就有可能被多次調(diào)用和修改。

3.構(gòu)造方法注入(Spring 4.x之后推薦注入方式)

package com.java.demo.service;
import com.java.demo.dao.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserService4 {
    private UserRepository userRepository;
    @Autowired
    public UserService4(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
    public void sayHi() {
        System.out.println("Do UserService4 sayHi.");
        userRepository.add();
    }
}

如果當(dāng)前類中存在一個(gè)構(gòu)造方法時(shí),@Autowired可以省略。

構(gòu)造方法注入優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

a)可以注入一個(gè)final修飾的變量。

b)注入的對象不會修改,因?yàn)闃?gòu)造方法只會加載一次。

c)構(gòu)造方法注入可以保證注入對象完全初始化。

d)構(gòu)造方法注入通用性更好。

缺點(diǎn):

a)寫法比屬性注入復(fù)雜。

b)使用構(gòu)造方法注入,無法解決循環(huán)依賴的問題。

到此這篇關(guān)于Spring實(shí)現(xiàn)對象注入的三種方法詳解的文章就介紹到這了,更多相關(guān)Spring對象注入內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何獲取java新IO的Path文件大小

    如何獲取java新IO的Path文件大小

    這篇文章主要介紹了如何獲取java新IO的Path文件大小,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Java中位運(yùn)算(移位、位與、或、異或、非) 的簡單實(shí)例

    Java中位運(yùn)算(移位、位與、或、異或、非) 的簡單實(shí)例

    Java中位運(yùn)算(移位、位與、或、異或、非) 的簡單實(shí)例,需要的朋友可以參考一下
    2013-02-02
  • 阿里巴巴 Sentinel + InfluxDB + Chronograf 實(shí)現(xiàn)監(jiān)控大屏

    阿里巴巴 Sentinel + InfluxDB + Chronograf 實(shí)現(xiàn)監(jiān)控大屏

    這篇文章主要介紹了阿里巴巴 Sentinel + InfluxDB + Chronograf 實(shí)現(xiàn)監(jiān)控大屏,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Spring Boot 緩存 Cache 入門詳解

    Spring Boot 緩存 Cache 入門詳解

    本文主要介紹SpringBoot緩存的入門知識,包括緩存的必要性、常見的緩存策略、SpringCache的注解使用、SpringBoot與緩存的集成以及Ehcache和Redis的示例,同時(shí),還提供了緩存面試問題的思路和答案,幫助讀者更好地理解和掌握SpringBoot緩存的相關(guān)內(nèi)容,感興趣的朋友一起看看吧
    2025-03-03
  • CCF考試試題之門禁系統(tǒng)java解題代碼

    CCF考試試題之門禁系統(tǒng)java解題代碼

    這篇文章主要為大家詳細(xì)介紹了CCF考試試題之門禁系統(tǒng)java解題代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • 使用Java實(shí)現(xiàn)PDF填充圖片功能

    使用Java實(shí)現(xiàn)PDF填充圖片功能

    本文介紹了使用Java和iText庫在PDF文件中填充圖片的方法,包括基本步驟、準(zhǔn)備工作、注意事項(xiàng),以及如何使用ApachePDFBox處理批量圖片并設(shè)置A4紙大小,還提供了性能優(yōu)化建議,如版本兼容性、內(nèi)存管理、流式處理等,需要的朋友可以參考下
    2025-09-09
  • SpringBoot中使用Jsoup爬取網(wǎng)站數(shù)據(jù)的方法

    SpringBoot中使用Jsoup爬取網(wǎng)站數(shù)據(jù)的方法

    這篇文章主要介紹了SpringBoot中使用Jsoup爬取網(wǎng)站數(shù)據(jù)的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • SpringBoot讀取Resource下文件的4種方法

    SpringBoot讀取Resource下文件的4種方法

    這篇文章主要介紹了SpringBoot讀取Resource下文件的4種方法小結(jié),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Collection stream使用示例詳解

    Collection stream使用示例詳解

    這篇文章主要介紹了Collection stream使用示例,stream流幾乎可以完成對集合的任意操作,映射、去重、分組、排序、過濾等
    2022-12-12
  • Spring計(jì)劃任務(wù)用法實(shí)例詳解

    Spring計(jì)劃任務(wù)用法實(shí)例詳解

    這篇文章主要介紹了Spring計(jì)劃任務(wù)用法,結(jié)合實(shí)例形式詳細(xì)分析了spring計(jì)劃任務(wù)相關(guān)原理、配置、使用方法及操作注意事項(xiàng),需要的朋友可以參考下
    2019-11-11

最新評論

武定县| 茂名市| 土默特左旗| 盐源县| 定日县| 秭归县| 通化市| 灵山县| 项城市| 高雄县| 科技| 荔浦县| 合山市| 安义县| 皋兰县| 抚松县| 阳东县| 马边| 铅山县| 和平县| 叙永县| 东山县| 延津县| 灵山县| 常宁市| 陈巴尔虎旗| 龙陵县| 海宁市| 宣威市| 崇阳县| 满城县| 舞阳县| SHOW| 凌源市| 定边县| 长垣县| 西平县| 丰原市| 井研县| 崇左市| 兴业县|