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

Spring依賴注入方式(Dependency Injection)

 更新時間:2024年10月24日 14:44:40   作者:知楠行易  
在實際開發(fā)中,推薦使用構造器注入而非字段注入,原因包括官方推薦、代碼簡潔、安全性高和易于測試,構造器注入通過在對象創(chuàng)建時注入所有必需的依賴,避免運行時忘記注入的問題,且利用Lombok的@RequiredArgsConstructor可自動生成構造函數

Spring依賴注入(Dependency Injection)

先說結論

  • 實際開發(fā)時盡量選擇 構造器注入 而不是 字段注入。
  • 設值注入 和 方法注入 適用的場景較少,較特殊。

原因

  • 官方推薦使用!
  • 代碼更簡潔:配合 Lombok 的 @RequiredArgsConstructor,可以自動生成包含所有 final 字段的構造函數。
  • 更安全:構造器注入確保所有必需的依賴在對象創(chuàng)建時就已經注入,避免了在運行時忘記注入某個依賴導致 NullPointerException 的問題。
  • 更易于測試:使用構造器注入時,可以直接通過構造器傳遞依賴進行單元測試,而不需要模擬框架的注入機制。

至于 @Resource它是 Java 的 javax.annotation.Resource 注解,個人建議在Spring項目中就不要用了。

兩者區(qū)別如下:

@Autowired

  • Spring 提供的注解:@Autowired 是 Spring 容器提供的注解,專門用于依賴注入。
  • 默認按類型注入:@Autowired 默認按照類型(type)進行注入。
  • 可指定按名稱注入:可以通過 @Qualifier 注解指定按名稱注入。

@Resource

  • J2EE 標準注解:@Resource 是 J2EE 標準的一部分,通常用于 EJB 和其他 J2EE 資源的注入。
  • 默認按名稱注入:@Resource 默認按照名稱(name)進行注入,如果找不到匹配的名稱,則按類型(type)注入。
  • 不需要 @Qualifier:@Resource 可以通過 name 屬性指定名稱,而不需要額外的 @Qualifier 注解。

一、構造器注入(Constructor Injection)

構造器注入通過類的構造方法來傳遞依賴。

舉個例子:

@RestController
@RequiredArgsConstructor
public class WarningTaskController {
    // 注意使用 final 標記不可變
    private final WarningTaskService taskService;
    // 多個依賴可以
}

二、設值注入(Setter Injection)

設值注入通過 setter 方法來注入依賴。

舉個例子:

使用 Spring Security ,默認內存用戶認證的信息可以配置spring.security.user.name=customUserName就是通過 Setter 注入。

源碼如下:

@ConfigurationProperties(prefix = "spring.security")
public class SecurityProperties {
    // 省略一些非必要的代碼
	
	private final User user = new User();

	public User getUser() {
		return this.user;
	}


	public static class User {

		private String name = "user";
		private String password = UUID.randomUUID().toString();
		private List<String> roles = new ArrayList<>();

		private boolean passwordGenerated = true;

		public String getName() {
			return this.name;
		}

		public void setName(String name) {
			this.name = name;
		}

		// 省略其他 getter/setter
	}

}

三、字段注入(Field Injection)

字段注入直接通過字段來注入依賴。

舉個例子:

@RestController
public class WarningTaskController {

    // 不推薦使用
    // 如果依賴非常多,代碼會很臃腫
    @Autowired
    private final WarningTaskService taskService;

}

四、方法注入(Method Injection)

方法注入通過方法參數來注入依賴。

舉個例子:

@RestController
public class WarningTaskController {
    private WarningTaskService taskService;

    // 不推薦 如果對象是可變的
    @Autowired
    public void configure(WarningTaskService taskService) {
        this.taskService = taskService;
    }

    // 其他業(yè)務邏輯...
}

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Maven+Tomcat8 實現(xiàn)自動化部署的方法

    Maven+Tomcat8 實現(xiàn)自動化部署的方法

    本篇文章主要介紹了Maven+Tomcat8 實現(xiàn)自動化部署的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • Apache DolphinScheduler實現(xiàn)自動化打包單機/集群部署詳解

    Apache DolphinScheduler實現(xiàn)自動化打包單機/集群部署詳解

    這篇文章主要為大家介紹了Apache DolphinScheduler實現(xiàn)自動化打包單機/集群部署詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • java實現(xiàn)下載文件到默認瀏覽器路徑

    java實現(xiàn)下載文件到默認瀏覽器路徑

    這篇文章主要介紹了java實現(xiàn)下載文件到默認瀏覽器路徑,具有很好的參考價值,希望對的大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Java實現(xiàn)常見排序算法的優(yōu)化

    Java實現(xiàn)常見排序算法的優(yōu)化

    今天給大家?guī)淼氖顷P于Java的相關知識,文章圍繞著Java實現(xiàn)常見排序算法的優(yōu)化展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下
    2021-01-01
  • InterProcessMutex實現(xiàn)zookeeper分布式鎖原理

    InterProcessMutex實現(xiàn)zookeeper分布式鎖原理

    本文主要介紹了InterProcessMutex實現(xiàn)zookeeper分布式鎖原理,文中根據實例編碼詳細介紹的十分詳盡,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • springboot支持https請求的實現(xiàn)

    springboot支持https請求的實現(xiàn)

    本文主要介紹了springboot支持https請求的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • 修改jvm-sandbox源碼導致線程安全分析

    修改jvm-sandbox源碼導致線程安全分析

    這篇文章主要為大家介紹了修改jvm-sandbox源碼導致線程安全分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • java中double轉化為BigDecimal精度缺失的實例

    java中double轉化為BigDecimal精度缺失的實例

    下面小編就為大家?guī)硪黄猨ava中double轉化為BigDecimal精度缺失的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • idea SpringBoot+Gradle環(huán)境配置到項目打包

    idea SpringBoot+Gradle環(huán)境配置到項目打包

    Gradle是一個基于Java應用的項目自動化構建工具,本文介紹了在IDEA中創(chuàng)建Spring Boot Gradle項目,項目配置包括init.gradle和settings.gradle,感興趣的可以了解一下
    2024-11-11
  • 代理角色java設計模式之靜態(tài)代理詳細介紹

    代理角色java設計模式之靜態(tài)代理詳細介紹

    查了好多資料,發(fā)現(xiàn)還是不全,干脆自己整理吧,至少保證在我的做法正確的,以免誤導讀者,也是給自己做個記錄吧!
    2013-05-05

最新評論