首頁 Java java教程 Spring依賴注入的三種方式是什麼

Spring依賴注入的三種方式是什麼

Apr 29, 2020 pm 01:26 PM
spring 依賴注入

Spring依賴注入的三種方式是什麼

Spring依賴注入(DI)的三種方式分別是:

#1、介面注入

2、Setter方法注入

3、建構方法注入

(影片教學推薦:java影片

#下面來為大家介紹這三種依賴注入在Spring中是怎麼樣實現的。

首先我們需要以下幾個類別:

介面Login.java

介面實作類別LoginImpl.java

一個處理類別LoginAction.java

還有一個測試類別TestMain.java

LoginImpl.java如下:

package com.spring.test.di;

public class LoginImpl implements Login{

public String getName(){

return "fengyun";

}

}

TestMain.java

package com.spring.test.di;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.FileSystemXmlApplicationContext;

public class TestMain {

/**

* @param args

*/

public static void main(String[] args) {// 得到ApplicationContext对象

ApplicationContext ctx = new FileSystemXmlApplicationContext(

"applicationContext.xml");

// 得到Bean

LoginAction loginAction = (LoginAction) ctx.getBean("loginAction");

loginAction.execute();

}

}
登入後複製

LoginAction.java 會根據使用不同的注入方法而稍有不同。

下面按照注入的方法來看LoginAction.java類別

Setter方法注入:

package com.spring.test.di;

public class LoginAction {

private Login login;

public void execute() {

String name = login.getName();

System.out.print("My Name Is " + name);

}

/**

* @return the login

*/

public Logic getLogin() {

return login;

}

/**

* @param login

* the login to set

*/

public void setLogin(Login login) {

this.login = login;

}

}
登入後複製

定義了一個Login 類型的變數login, 在LoginAction並沒有對login 進行實例化,而只有他對應的setter/getter方法,因為我們這裡使用的是Spring的依賴注入的方式。

applicationContext.xml設定檔如下:

<bean id="login" class="com.spring.test.di.LoginImpl"/>
<bean id="loginAction" class="com.spring.test.di.LoginAction">
<property name="login" ref="login"></property>
</bean>
登入後複製

現在可以執行testMain.java了,我們可以看到控制台打出了 My Name Is fengyun。

OK了,這就是spring的setter方法注入。

建構方法注入

顧名思義,建構方法注入,就是我們依賴LoginAction的建構方法來達到DI的目的,如下所示:

LoginAction.java

package com.spring.test.di;

public class LoginAction {

private Login login;

public LoginAction(Login login) {

this.login = login;

}

public void execute() {

String name = login.getName();

System.out.print("My Name Is " + name);

}

}
登入後複製

這裡我們加入了一個LoginAction的建構方法

applicationContext.xml設定檔如下:

<bean id="login" class="com.spring.test.di.LoginImpl"/>
<bean id="loginAction" class="com.spring.test.di.LoginAction">
<constructor­arg index="0" ref="login"></constructor­arg>
</bean>
登入後複製

我們使用constructorarg來進行設定, index屬性是用來表示建構方法中參數的順序的,如果有多個參數,則按照順序,從0,1...來配置

我們現在可以運行testMain.java了,結果跟使用Setter方法注入完全一樣。

其中要注意一點有:建構子有多個參數的話,如:參數1,參數2,而參數2依賴參數1,這種情況則要注意建構子的順序,必須將參數1放在參數2之前。

下面繼續說說我們不常用到的介面注入,還是以LoginAction為例,我們對他做了修改,如下所示:

LoginAction.java

package com.spring.test.di;

public class LoginAction {

private Logic login;

public void execute() {

try {

Object obj = Class.forName("com.spring.test.di.LoginImpl")

.newInstance();

login = (Login) obj;

String name = login.getName();

System.out.print("My Name Is " + name);

} catch (Exception e) {

e.printStackTrace();

}

}

}
登入後複製

設定檔:

<bean id="logic" class="com.spring.test.di.LoginImpl"/>
<bean id="loginAction" class="com.spring.test.di.LoginAction">
</bean>
登入後複製

工作中最常用就是Setter和建構子這兩種注入方法。

推薦教學:java入門程式

以上是Spring依賴注入的三種方式是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

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

熱工具

記事本++7.3.1

記事本++7.3.1

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

編程新範式,當Spring Boot遇上OpenAI 編程新範式,當Spring Boot遇上OpenAI Feb 01, 2024 pm 09:18 PM

2023年,AI技術已成為熱門話題,對各行業產生了巨大影響,程式設計領域尤其如此。人們越來越認識到AI技術的重要性,Spring社群也不例外。隨著GenAI(GeneralArtificialIntelligence)技術的不斷進步,簡化具備AI功能的應用程式的創建變得至關重要和迫切。在這個背景下,"SpringAI"應運而生,旨在簡化開發AI功能應用程式的過程,使其變得簡單直觀,避免不必要的複雜性。透過"SpringAI",開發者可以更輕鬆地建立具備AI功能的應用程序,將其變得更加易於使用和操作

利用Spring Boot以及Spring AI建構生成式人工智慧應用 利用Spring Boot以及Spring AI建構生成式人工智慧應用 Apr 28, 2024 am 11:46 AM

Spring+AI作為行業領導者,透過其強大、靈活的API和先進的功能,為各種行業提供了領先性的解決方案。在本專題中,我們將深入探討Spring+AI在各領域的應用範例,每個案例都將展示Spring+AI如何滿足特定需求,實現目標,並將這些LESSONSLEARNED擴展到更廣泛的應用。希望這個專題能對你有所啟發,更深入地理解和利用Spring+AI的無限可能。 Spring框架在軟體開發領域已經有超過20年的歷史,自SpringBoot1.0版本發布以來已有10年。現在,無人會質疑,Spring

spring編程式事務有哪些實作方式 spring編程式事務有哪些實作方式 Jan 08, 2024 am 10:23 AM

spring編程式事務的實作方式:1、使用TransactionTemplate;2、使用TransactionCallback和TransactionCallbackWithoutResult;3、使用Transactional註解;4、使用TransactionTemplate和@Transactional結合使用;5、自訂事務管理器。

Spring如何設定事務隔離級別 Spring如何設定事務隔離級別 Jan 26, 2024 pm 05:38 PM

Spring設定事務隔離等級的方法:1、使用@Transactional註解;2、在Spring設定檔中設定;3、使用PlatformTransactionManager;4、在Java配置類別中設定。詳細介紹:1、使用@Transactional註解,在需要進行事務管理的類別或方法上加入@Transactional註解,並在屬性中設定隔離等級;2、在Spring設定檔等等。

Spring註解大揭秘:常用註解解析 Spring註解大揭秘:常用註解解析 Dec 30, 2023 am 11:28 AM

Spring是一個開源框架,提供了許多註解來簡化和增強Java開發。本文將詳細解釋常用的Spring註解,並提供具體的程式碼範例。 @Autowired:自動組裝@Autowired註解可以用於自動組裝Spring容器中的Bean。當我們在需要依賴的地方使用@Autowired註解時,Spring將會在容器中尋找匹配的Bean並自動注入。範例程式碼如下:@Auto

JUnit單元測試框架在Spring專案中的應用 JUnit單元測試框架在Spring專案中的應用 Apr 18, 2024 pm 04:54 PM

JUnit是Spring專案中廣泛使用的Java單元測試框架,可透過以下步驟應用:新增JUnit依賴項:org.junit.jupiterjunit-jupiter5.8.1test編寫測試案例:使用@ExtendWith(SpringExtension.class)啟用擴展,使用@Autowired注入Bean,使用@BeforeEach和@AfterEach準備和清理,用@Test標記測試方法。

Golang函數參數傳遞中的依賴注入模式 Golang函數參數傳遞中的依賴注入模式 Apr 14, 2024 am 10:15 AM

在Go中,依賴注入(DI)模式透過函數參數傳遞實現,類型包括值傳遞和指標傳遞。在DI模式中,依賴項通常以指標傳遞,以提高解耦性、減少鎖爭用和支援可測試性。透過使用指針,函數與特定實作解耦,因為它只依賴介面類型。指標傳遞還可以減少傳遞大物件的開銷,從而減少鎖爭用。此外,DI模式可以輕鬆地為使用DI模式的函數編寫單元測試,因為可以輕鬆地模擬依賴項。

Spring Security權限控制框架使用指南 Spring Security權限控制框架使用指南 Feb 18, 2024 pm 05:00 PM

在後台管理系統中,通常需要存取權限控制,以限制不同使用者對介面的存取能力。如果使用者缺乏特定權限,則無法存取某些介面。本文將用waynboot-mall專案舉例,跟大家介紹常見後管系統如何引入權限控制框架SpringSecurity。大綱如下:waynboot-mall專案網址:https://github.com/wayn111/waynboot-mall一、什麼是SpringSecuritySpringSecurity是一個基於Spring框架的開源項目,旨在為Java應用程式提供強大且靈活的安

See all articles