最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

@RequiredArgsConstructor如何實現(xiàn)構(gòu)造器注入

 更新時間:2024年09月04日 15:56:23   作者:しろいし  
這篇文章主要介紹了@RequiredArgsConstructor如何實現(xiàn)構(gòu)造器注入問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

@RequiredArgsConstructor實現(xiàn)構(gòu)造器注入

1.@Autowired和@Resource 注解

  • @Autowired
  • @Autowired 是 Spring 框架提供的注解,用于自動裝配依賴。
  • 可以用于字段、構(gòu)造函數(shù)和 setter 方法。
@Autowired
private ISysUserService userService;
  • @Resource
  • @Resource 是 Java EE 提供的注解,Spring 也支持它,用于自動裝配依賴。
  • 一般用于字段和 setter 方法。
@Resource
private ISysUserService userService;

2.構(gòu)造函數(shù)注入

使用 Lombok 的 @RequiredArgsConstructor

springboot @RequiredArgsConstructor的概念與使用

  • @RequiredArgsConstructor 是 Lombok 提供的注解,它會自動生成包含所有 final 字段的構(gòu)造函數(shù)。
  • 使用構(gòu)造函數(shù)注入可以確保依賴注入在對象創(chuàng)建時完成,確保所有依賴都是非空的。
@RequiredArgsConstructor
@RestController
@RequestMapping("/system/user")
public class SysUserController extends BaseController {
    private final ISysUserService userService;
    private final ISysRoleService roleService;
    private final ISysPostService postService;
    private final ISysDeptService deptService;
    private final ISysUserPostService userPostService;
    
    // 構(gòu)造函數(shù)由 Lombok 自動生成,注入所有 final 字段
}

3.比較和優(yōu)點

字段注入(@Autowired@Resource

優(yōu)點:代碼簡潔,直接在字段上注解。

缺點

  • 難以進行單元測試,因為需要通過反射或其他方式注入 mock 對象。
  • 依賴注入發(fā)生在對象創(chuàng)建之后,可能導(dǎo)致依賴未完全初始化的問題。
  • 違反了依賴倒置原則,類直接依賴于容器。

構(gòu)造函數(shù)注入

優(yōu)點

  • 強制依賴在對象創(chuàng)建時就完全初始化,確保所有依賴非空。
  • 更容易進行單元測試,因為可以通過構(gòu)造函數(shù)注入 mock 對象。
  • 更符合依賴倒置原則,使類更獨立于容器。
  • 提升了代碼的可讀性和可維護性,尤其是當依賴較多時。

缺點

  • 需要額外的構(gòu)造函數(shù)代碼,但使用 Lombok 的 @RequiredArgsConstructor 可以減輕這個負擔。

4. 示例對比

使用 @Autowired

@RestController
@RequestMapping("/system/user")
public class SysUserController extends BaseController {
    
    @Autowired
    private ISysUserService userService;
    
    @Autowired
    private ISysRoleService roleService;
    
    @Autowired
    private ISysPostService postService;
    
    @Autowired
    private ISysDeptService deptService;
    
    @Autowired
    private ISysUserPostService userPostService;

    // 其他代碼
}

使用構(gòu)造函數(shù)注入

@RequiredArgsConstructor
@RestController
@RequestMapping("/system/user")
public class SysUserController extends BaseController {
    private final ISysUserService userService;
    private final ISysRoleService roleService;
    private final ISysPostService postService;
    private final ISysDeptService deptService;
    private final ISysUserPostService userPostService;

    // 其他代碼
}

通過這種構(gòu)造函數(shù)注入的方式,不僅可以增強代碼的健壯性和可維護性,還可以更好地利用 Spring 的依賴注入特性和 Lombok 的簡化代碼的優(yōu)勢。

好處

Spring的構(gòu)造器注入

5.關(guān)于注解

在使用構(gòu)造函數(shù)注入時,不需要額外添加注解,只需要提供構(gòu)造函數(shù)即可。Spring 會自動檢測到你的構(gòu)造函數(shù)并進行依賴注入。

使用構(gòu)造函數(shù)注入,不需要額外注解

@RestController
@RequestMapping("/system/user")
public class SysUserController extends BaseController {
    private final ISysUserService userService;
    private final ISysRoleService roleService;
    private final ISysPostService postService;
    private final ISysDeptService deptService;
    private final ISysUserPostService userPostService;

    // 自己編寫構(gòu)造函數(shù)
    public SysUserController(ISysUserService userService, 
                             ISysRoleService roleService, 
                             ISysPostService postService, 
                             ISysDeptService deptService, 
                             ISysUserPostService userPostService) {
        this.userService = userService;
        this.roleService = roleService;
        this.postService = postService;
        this.deptService = deptService;
        this.userPostService = userPostService;
    }
}

使用構(gòu)造函數(shù)注入的要點

1.定義構(gòu)造函數(shù):

在類中定義一個包含所有需要依賴的構(gòu)造函數(shù)。

2.Spring 自動注入:

Spring 在創(chuàng)建 Bean 實例時,會自動識別并調(diào)用該構(gòu)造函數(shù),同時注入所需的依賴。

示例代碼

package com.example.demo.controller;

import com.example.demo.service.ISysUserService;
import com.example.demo.service.ISysRoleService;
import com.example.demo.service.ISysPostService;
import com.example.demo.service.ISysDeptService;
import com.example.demo.service.ISysUserPostService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/system/user")
public class SysUserController {

    private final ISysUserService userService;
    private final ISysRoleService roleService;
    private final ISysPostService postService;
    private final ISysDeptService deptService;
    private final ISysUserPostService userPostService;

    // 構(gòu)造函數(shù)注入
    public SysUserController(ISysUserService userService, 
                             ISysRoleService roleService, 
                             ISysPostService postService, 
                             ISysDeptService deptService, 
                             ISysUserPostService userPostService) {
        this.userService = userService;
        this.roleService = roleService;
        this.postService = postService;
        this.deptService = deptService;
        this.userPostService = userPostService;
    }

    // 你的控制器方法
}

在這個例子中,不需要使用任何額外的注解來標注構(gòu)造函數(shù),Spring 會自動識別并注入依賴。(當然,標注了也不會報錯,但是只能使用@Autowired,不能使用@Resouce,@Resource 注解通常用于字段或 setter 方法注入)

額外情況

多個構(gòu)造函數(shù):

  • 如果一個類中有多個構(gòu)造函數(shù),并且其中只有一個構(gòu)造函數(shù)有注入?yún)?shù),Spring 會使用這個構(gòu)造函數(shù)進行注入。
  • 如果有多個構(gòu)造函數(shù)都有注入?yún)?shù),則需要使用 @Autowired 注解來明確指定使用哪個構(gòu)造函數(shù)。

示例代碼(多個構(gòu)造函數(shù))

package com.example.demo.controller;

import com.example.demo.service.ISysUserService;
import com.example.demo.service.ISysRoleService;
import com.example.demo.service.ISysPostService;
import com.example.demo.service.ISysDeptService;
import com.example.demo.service.ISysUserPostService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/system/user")
public class SysUserController {

    private final ISysUserService userService;
    private final ISysRoleService roleService;
    private final ISysPostService postService;
    private final ISysDeptService deptService;
    private final ISysUserPostService userPostService;

    // 使用 @Autowired 明確指定使用哪個構(gòu)造函數(shù)
    @Autowired
    public SysUserController(ISysUserService userService, 
                             ISysRoleService roleService, 
                             ISysPostService postService, 
                             ISysDeptService deptService, 
                             ISysUserPostService userPostService) {
        this.userService = userService;
        this.roleService = roleService;
        this.postService = postService;
        this.deptService = deptService;
        this.userPostService = userPostService;
    }

    // 另一個構(gòu)造函數(shù)
    public SysUserController(ISysUserService userService) {
        this.userService = userService;
        this.roleService = null;
        this.postService = null;
        this.deptService = null;
        this.userPostService = null;
    }

    // 你的控制器方法
}

在這個例子中,由于存在多個構(gòu)造函數(shù),需要使用 @Autowired 注解來明確指定 Spring 使用哪個構(gòu)造函數(shù)進行依賴注入。

總結(jié)

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

相關(guān)文章

  • Spring-AOP @AspectJ切點函數(shù)之@annotation()用法

    Spring-AOP @AspectJ切點函數(shù)之@annotation()用法

    這篇文章主要介紹了Spring-AOP @AspectJ切點函數(shù)之@annotation()用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • IDEA maven引入SSL證書校驗問題及處理

    IDEA maven引入SSL證書校驗問題及處理

    這篇文章主要討論了在Maven項目中遇到依賴導(dǎo)入問題,特別是關(guān)于PKIX路徑構(gòu)建失敗的錯誤,文章提供了三種解決方法:手動下載依賴、忽略SSL證書校驗以及生成并導(dǎo)入SSL證書,每種方法都有詳細的步驟和示例代碼,幫助開發(fā)者解決這個問題
    2025-02-02
  • MyBatis 配置復(fù)用從入門到精通

    MyBatis 配置復(fù)用從入門到精通

    本文將深入探討MyBatis的各種配置復(fù)用技巧,幫助您寫出更優(yōu)雅、更易維護的持久層代碼,本文結(jié)合實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2026-03-03
  • Springcloud eureka搭建高可用集群過程圖解

    Springcloud eureka搭建高可用集群過程圖解

    這篇文章主要介紹了Springcloud eureka搭建高可用集群過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • 線程池ThreadPoolExecutor應(yīng)用過程

    線程池ThreadPoolExecutor應(yīng)用過程

    這篇文章主要介紹了如何使用ThreadPoolExecutor創(chuàng)建線程池,包括其構(gòu)造方法、常用方法、參數(shù)校驗以及如何選擇合適的拒絕策略,文章還討論了為什么應(yīng)該強制要求使用ThreadPoolExecutor創(chuàng)建線程池,并提供了在項目和Spring中創(chuàng)建線程池的示例
    2025-12-12
  • Java使用freemarker實現(xiàn)word下載方式

    Java使用freemarker實現(xiàn)word下載方式

    文章介紹了如何使用FreeMarker實現(xiàn)Word文件下載,包括引用依賴、創(chuàng)建Word模板、將Word文件存為XML格式、更改后綴為FTL模板、處理圖片和代碼實現(xiàn)
    2025-02-02
  • Java處理科學計數(shù)法數(shù)字方式

    Java處理科學計數(shù)法數(shù)字方式

    這篇文章主要介紹了Java處理科學計數(shù)法數(shù)字方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Java使用Ajax異步上傳文件

    Java使用Ajax異步上傳文件

    使用Ajax上傳文件的應(yīng)用場景頗多,比如上傳用戶頭像、博客文章中插入圖片、對認證用戶相關(guān)身份進行校驗等等很多很多。本文提供一個簡單的示例供大家參考
    2021-05-05
  • windows系統(tǒng)上如何進行maven安裝和配置方式

    windows系統(tǒng)上如何進行maven安裝和配置方式

    這篇文章主要介紹了windows系統(tǒng)上如何進行maven安裝和配置方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • Springboot使用pdfbox提取PDF圖片的代碼示例

    Springboot使用pdfbox提取PDF圖片的代碼示例

    PDFBox是一個用于創(chuàng)建和處理PDF文檔的Java庫,它可以使用Java代碼創(chuàng)建、讀取、修改和提取PDF文檔中的內(nèi)容,本文就給大家介紹Springboot如何使用pdfbox提取PDF圖片,感興趣的同學可以借鑒參考
    2023-06-06

最新評論

溧阳市| 怀安县| 太谷县| 邢台市| 泉州市| 平江县| 社旗县| 郓城县| 章丘市| 武胜县| 平舆县| 临朐县| 海门市| 合水县| 高雄市| 新和县| 宁陵县| 望奎县| 库伦旗| 陵水| 龙州县| 吕梁市| 凯里市| 冕宁县| 蛟河市| 昭苏县| 依兰县| 镶黄旗| 祁门县| 佛冈县| 静宁县| 南丹县| 商洛市| 托里县| 台安县| 新宾| 潜江市| 中牟县| 成都市| 临夏市| 白河县|