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

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

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

1.屬性注入

屬性注?是使? @Autowired 實現(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(從容器中)獲取對象,如果只獲取一個,那么直接將此對象注入到當(dāng)前屬性上;如果獲取到多個對象,才會使用getName(根據(jù)名稱)進(jìn)行匹配。

問題:同類型的Bean存儲到容器多個,獲取時報錯的問題

解決方案:

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

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

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

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

缺點:

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

b)只適用于IoC容器。

c)更容易違背單一設(shè)計原則,因為使用起來比較簡單。

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)缺點

優(yōu)點:

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

缺點:

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

b)Setter注入的對象可以被修改。Setter本生就是一個方法,既然是一個方法就有可能被多次調(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òu)造方法時,@Autowired可以省略。

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

優(yōu)點:

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

b)注入的對象不會修改,因為構(gòu)造方法只會加載一次。

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

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

缺點:

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

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

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

相關(guān)文章

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

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

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

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

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

    Java IO流 File類的常用API實例

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

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

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

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

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

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

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

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

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

    SpringBoot中處理JSON日期格式方式

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

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

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

    自定義一個簡單的JDBC連接池實現(xiàn)方法

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

最新評論