搜尋
首頁Javajava教程Java之Spring簡單讀取和儲存物件的方法是什麼

Spring 簡單的讀取和儲存物件

取得Bean 物件(物件組裝)

取得bean 物件也叫做物件裝配,是把物件取出來放到某個類中,有時候也叫對象註⼊。

物件組裝(物件注入)的實作方法以下3 種:

  • #屬性注入

  • 建構方法注入

  • Setter 注入

我們先建立以下幾個套件和幾個類別:

Java之Spring簡單讀取和儲存物件的方法是什麼

屬性注入

屬性註⼊是使⽤ @Autowired 實現的,將Service 類別註⼊到 Controller 類別中.

@Controller
public class StudentController {
    // 1.使用属性注入的方式获取 Bean
    @Autowired
    private StudentService studentService;

    public void sayHi() {
        // 调用 service 方法
        studentService.sayHi();
    }
}

優點:

實作簡單, 使用簡單.

# 缺點:

  • ##功能性問題: 不能注入不可變(

    final) 物件.

Java之Spring簡單讀取和儲存物件的方法是什麼

#在Java 中final 物件(不可變)要嘛直接賦值,要嘛在構造方法中賦值,所以當使用屬性注入final 物件時,它不符合Java 中final 的使用規範,所以就不能注入成功了。

  • 通用性問題: 只能適應於 

    IoC 容器.

  • 設計原則問題: 更容易違反單一設計原則. (針對物件是類別)

單一設計原則:

  • 針對於類別層級

  • 針對於方法層級

建構方法注入
從 

Spring 4.x 之後, Spring 官方建議使用建構方法注入的形式.

@Controller
public class StudentController {
    // 2.构造方法注入
    private StudentService studentService;
    
    // @Autowired 可省略
	@Autowired
    public StudentController(StudentService studentService) {
        this.studentService = studentService;
    }

    public void sayHi() {
        // 调用 service 方法
        studentService.sayHi();
    }
}

# 注意

  • ##@Autowired可省略.

  • 但是如果類別中有多個建構⽅法,那麼需要加入 

    @Autowired 來明確指定到底使⽤哪個建構⽅法,否則程序會報錯.

優點:

  • #可注入不可變物件.

Java之Spring簡單讀取和儲存物件的方法是什麼

  • 注入物件不會被修改.

    • 加上了 

      final 修飾符.

    • 建構方法是隨著類別載入只執行一次的.

  • #注入物件會被完全初始化。(使用建構方法帶來的優點)

  • 通用性更好.

  • ##沒有屬性注入實作簡單.
  • Setter 注入

Setter

 注⼊和屬性的Setter ⽅法實作類似,只不過在設定set ⽅法的時候需要加上@Autowired 註解.

@Controller
public class StudentController {
    // 3.setter 注入
    private StudentService studentService;

    @Autowired
    public void setStudentService(StudentService studentService) {
        this.studentService = studentService;
    }

    public void sayHi() {
        // 调用 service 方法
        studentService.sayHi();
    }
}

Java之Spring簡單讀取和儲存物件的方法是什麼優點:

更符合單一設計原則. (針對物件是方法層級)

  • #缺點:

  • 不能注入不可變物件(
  • final
 修飾的物件).

##注入的物件可被修改.

Java之Spring簡單讀取和儲存物件的方法是什麼

set

 方法是普通set 方法, 可以被重複呼叫, 有被修改的風險.

小結: 日常開發當中, 使用屬性注入實作更簡單的讀取Bean, 還是主流的實作方式.
  • @Resource 關鍵字

    在進⾏類別註⼊時,除了可以使⽤ @Autowired 關鍵字之外,我們還可以使⽤ @Resource 進⾏注⼊.
  • @Controller
    public class StudentController {
        @Resource 
        private StudentService studentService;
    
        public void sayHi() {
            // 调用 service 方法
            studentService.sayHi();
        }
    }

    @Autowired和@Resource 的區別相同點: 都是用來實現依賴注入的.

    ###不同點:############功能支援不同: @Autowired支援屬性注入, setter 注入, 建構方法注入; @Resource 只支援屬性注入和setter 注入, 不支援建構方法注入.############出身不同: @Autowired 來自於Spring 框架; 而@Resource 來自於JDK.############參數支援不同: @Resource 支援更多的參數設定; 而 @Autowired 只支援required 參數.############ #同⼀類型多個@Bean 報錯處理######當出現以下多個Bean,傳回同⼀物件類型時程式會報錯##############此時我們運行:###
    public class App {
        public static void main(String[] args) {
            ApplicationContext applicationContext =
                    new ClassPathXmlApplicationContext("spring-config.xml");
            StudentController studentController =
                    applicationContext.getBean("studentController", StudentController.class);
            studentController.func();
        }
    }
    #### 注意# 會報錯, 報錯的原因是,非唯一的Bean 物件。 ######同⼀類型多個Bean 報錯處理######解決同⼀個類型,多個Bean 的解⽅案有以下兩個:############使⽤ ###@Resource(name="student1")### 定義.############使⽤ ###@Qualifier###註解定義名稱.###

# 使⽤ @Resource(name="student1") 定义.

@Controller
public class StudentController {
    
    @Resource(name = "student2")
    private Student student;

    public void func() {
        System.out.println(student.toString());
    }
}

# 使⽤ @Qualifier 注解定义名称.

@Controller
public class StudentController {
    
    @Resource
    @Qualifier("student2")
    private Student student;

    public void func() {
        System.out.println(student.toString());
    }
}

# 如果我们想用 @Autowired 可以写成:

@Autowired 
private Student student1;
// 存在有耦合性问题

以上是Java之Spring簡單讀取和儲存物件的方法是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:亿速云。如有侵權,請聯絡admin@php.cn刪除
如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案?如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案?Mar 17, 2025 pm 05:46 PM

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

如何使用適當的版本控制和依賴項管理創建和使用自定義Java庫(JAR文件)?如何使用適當的版本控制和依賴項管理創建和使用自定義Java庫(JAR文件)?Mar 17, 2025 pm 05:45 PM

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存?如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存?Mar 17, 2025 pm 05:44 PM

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

如何將JPA(Java持久性API)用於具有高級功能(例如緩存和懶惰加載)的對象相關映射?如何將JPA(Java持久性API)用於具有高級功能(例如緩存和懶惰加載)的對象相關映射?Mar 17, 2025 pm 05:43 PM

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類負載機制如何起作用,包括不同的類載荷及其委託模型?Java的類負載機制如何起作用,包括不同的類載荷及其委託模型?Mar 17, 2025 pm 05:35 PM

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器