欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2023年07月28日 09:58:10   作者:摸魚(yú)王胖嘟嘟  
這篇文章主要為大家學(xué)習(xí)介紹了Spring中實(shí)現(xiàn)對(duì)象注入的三種常用方法,文中的示例代碼講解詳細(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)寫(xiě)法
//        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(從容器中)獲取對(duì)象,如果只獲取一個(gè),那么直接將此對(duì)象注入到當(dāng)前屬性上;如果獲取到多個(gè)對(duì)象,才會(huì)使用getName(根據(jù)名稱)進(jìn)行匹配。

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

解決方案:

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

2.使用@AutoWired+@Qualifier來(lái)篩選bean對(duì)象;

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

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

缺點(diǎn):

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

b)只適用于IoC容器。

c)更容易違背單一設(shè)計(jì)原則,因?yàn)槭褂闷饋?lái)比較簡(jiǎ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)無(wú)法注入一個(gè)final修飾的變量;

b)Setter注入的對(duì)象可以被修改。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)注入的對(duì)象不會(huì)修改,因?yàn)闃?gòu)造方法只會(huì)加載一次。

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

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

缺點(diǎn):

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

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

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

相關(guān)文章

  • Java高性能實(shí)體類轉(zhuǎn)換工具M(jìn)apStruct的使用教程詳解

    Java高性能實(shí)體類轉(zhuǎn)換工具M(jìn)apStruct的使用教程詳解

    MapStruct 是一個(gè)代碼生成器,它基于約定優(yōu)于配置的方法,極大地簡(jiǎn)化了 Java bean 類型之間的映射實(shí)現(xiàn),本文主要介紹了MapStruct的具體使用以及如何進(jìn)行實(shí)體類轉(zhuǎn)換,感興趣的可以了解下
    2024-03-03
  • spring?cloud之eureka高可用集群和服務(wù)分區(qū)解析

    spring?cloud之eureka高可用集群和服務(wù)分區(qū)解析

    這篇文章主要介紹了spring?cloud之eureka高可用集群和服務(wù)分區(qū)解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java IO流 File類的常用API實(shí)例

    Java IO流 File類的常用API實(shí)例

    這篇文章主要介紹了Java IO流 File類的常用API實(shí)例的相關(guān)資料,需要的朋友參考下吧
    2017-05-05
  • Java實(shí)現(xiàn)MD5加密的方法

    Java實(shí)現(xiàn)MD5加密的方法

    這篇文章主要介紹了Java實(shí)現(xiàn)MD5加密的方法,實(shí)例分析了基于java實(shí)現(xiàn)md5加密的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • Java枚舉類型與泛型使用解讀

    Java枚舉類型與泛型使用解讀

    這篇文章主要介紹了Java枚舉類型與泛型使用解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 使用java實(shí)現(xiàn)備份和恢復(fù)SQLServer表數(shù)據(jù)

    使用java實(shí)現(xiàn)備份和恢復(fù)SQLServer表數(shù)據(jù)

    這篇文章主要為大家詳細(xì)介紹了如何使用java實(shí)現(xiàn)備份和恢復(fù)SQLServer表數(shù)據(jù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • ssm項(xiàng)目實(shí)現(xiàn)用戶登陸持久化(token)

    ssm項(xiàng)目實(shí)現(xiàn)用戶登陸持久化(token)

    這篇文章主要介紹了ssm項(xiàng)目實(shí)現(xiàn)用戶登陸持久化(token),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • SpringBoot中處理JSON日期格式方式

    SpringBoot中處理JSON日期格式方式

    SpringBoot中處理JSON日期格式主要有三種方式:使用@JsonFormat注解、配置默認(rèn)格式以及自定義Jackson的ObjectMapper,每種方式都有其適用場(chǎng)景,可以根據(jù)具體需求選擇合適的方法
    2025-02-02
  • Java實(shí)現(xiàn)插入排序,希爾排序和歸并排序

    Java實(shí)現(xiàn)插入排序,希爾排序和歸并排序

    這篇文章主要為大家詳細(xì)介紹了插入排序,希爾排序和歸并排序的多種語(yǔ)言的實(shí)現(xiàn)(JavaScript、Python、Go語(yǔ)言、Java),感興趣的小伙伴可以了解一下
    2022-12-12
  • 自定義一個(gè)簡(jiǎn)單的JDBC連接池實(shí)現(xiàn)方法

    自定義一個(gè)簡(jiǎn)單的JDBC連接池實(shí)現(xiàn)方法

    下面小編就為大家分享一篇自定義一個(gè)簡(jiǎn)單的JDBC連接池實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12

最新評(píng)論