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

解讀Spring配置與服務組件的關系和注入機制

 更新時間:2024年09月04日 10:36:33   作者:碼農(nóng)研究僧  
這篇文章主要介紹了解讀Spring配置與服務組件的關系和注入機制,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

1. 基本知識

使用 Spring 框架進行開發(fā)時,理解配置類與服務組件之間的關系,以及如何通過依賴注入將它們串聯(lián)起來,是非常重要的

1.1 配置類(@Configuration)

配置類是 Spring 中用于定義 Bean 的地方

通常使用 @Configuration 注解標記,表示這是一個配置類,Spring 將會掃描這些類并注冊其定義的 Bean

@Configuration
@ComponentScan(basePackages = "com.example.myapp")
public class AppConfig {
    @Bean
    public MyService myService() {
        return new MyServiceImpl();
    }
}

基本的參數(shù)補充如下:

  • 定義 Bean:通過 @Bean 注解的方法可以返回一個 Bean 對象,Spring 容器將會管理這個 Bean 的生命周期
  • 包掃描:使用 @ComponentScan 注解可以指定掃描的包,自動發(fā)現(xiàn)并注冊 Spring 組件(例如 @Component, @Service, @Repository 等)

1.2 實現(xiàn)類(@Service)

通常使用 @Service 注解標記,表示這是一個業(yè)務服務組件

通常實現(xiàn)一個接口,并在其內(nèi)部封裝了具體的業(yè)務邏輯

@Service
public class MyServiceImpl implements MyService {
    private final MyRepository myRepository;

    @Autowired
    public MyServiceImpl(MyRepository myRepository) {
        this.myRepository = myRepository;
    }

    @Override
    public void performService() {
        // 業(yè)務邏輯實現(xiàn)
    }
}

主要的功能如下:

  • 業(yè)務邏輯實現(xiàn):服務類實現(xiàn)具體的業(yè)務邏輯
  • 依賴注入:服務類通常會通過構造函數(shù)或字段注入所需的依賴(例如其他服務、配置屬性等)

1.3 依賴注入(Dependency Injection)

允許將依賴對象(即其他 Bean)注入到目標 Bean 中,減少了對象間的耦合度

主要的方式有如下:

  • 構造函數(shù)注入:通過構造函數(shù)將依賴注入到 Bean 中
  • 這種方式通常是推薦的,因為它可以確保依賴在 Bean 創(chuàng)建時就被提供
@Service
public class MyService {
    private final AnotherService anotherService;

    @Autowired
    public MyService(AnotherService anotherService) {
        this.anotherService = anotherService;
    }
}
  • 字段注入:通過直接將依賴注入到字段中
  • 這種方式相對簡單,但不如構造函數(shù)注入顯式
@Service
public class MyService {
    @Autowired
    private AnotherService anotherService;
}
  • 方法注入:通過特定的方法注入依賴,通常用于處理需要在運行時決定的依賴
@Service
public class MyService {
    private AnotherService anotherService;

    @Autowired
    public void setAnotherService(AnotherService anotherService) {
        this.anotherService = anotherService;
    }
}

1.4 組件類(@Component)

可以被自動發(fā)現(xiàn)和注冊為 Spring 管理的 Bean

@Component
public class MyComponent {
    // 組件邏輯
}

用于標記一個普通的組件類,可以是任意的類,不特定于服務、倉庫等特定角色

2. 實戰(zhàn)

為更好展示實戰(zhàn)項目中的運用,結合上述的知識點給予案例

以下的Demo只列出代碼前半部分,主要是為了更好的說明

  • JmReportConfiguration 配置了 manongServiceImpl 作為 Bean
  • manongServiceImpl 實現(xiàn)了 manongServiceI 接口
  • manongClient 依賴于 manongServiceI,并通過 Spring 注入使用它

2.1 配置類

  • 通過 @ComponentScan 注解掃描指定的包,自動發(fā)現(xiàn)和注冊 Spring 組件
  • 使用 @Bean 注解定義一個名為 manongService 的 Bean,類型為 manongServiceI
  • 此方法會創(chuàng)建 manongServiceImpl 的實例,并將其作為 Spring 容器中的 Bean
@Configuration(proxyBeanMethods = false)
@ComponentScan(basePackages = "org.jeecg.modules.jmreport") // 掃描積木報表的包
public class JmReportConfiguration {
    @Bean
    public manongServiceI manongService(A a, B b) {
        return new manongServiceImpl(a, b);
    }
}

2.2 實現(xiàn)類

使用 @RequiredArgsConstructor 注解自動生成一個包含所有 final 字段的構造函數(shù),

補充閱讀:詳細分析Java中@RequiredArgsConstructor注解的基本知識(附Demo)

@RequiredArgsConstructor
public class manongServiceImpl implements manongServiceI {
    private final A a;
    private final B b;
}

2.3 接口類

這是一個接口,定義了服務的合同

public interface manongServiceI {

}

2.4 組件類

負責與 manongServiceI 進行交互

默認構造函數(shù),通過 Spring 的 @Autowired 注解注入依賴

@Component("manongClient")
public class manongClient {

    @Autowired(required = false)
    private manongServiceI jimuTokenService;

    @Autowired(required = false)
    private JmReportBaseConfig jmBaseConfig;

    public manongClient() {
    }
}

總結

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

相關文章

  • springboot 使用上下文獲取bean

    springboot 使用上下文獲取bean

    這篇文章主要介紹了springboot 使用上下文獲取bean,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • Java對象轉JSON時動態(tài)的增刪改查屬性詳解

    Java對象轉JSON時動態(tài)的增刪改查屬性詳解

    這篇文章主要介紹了Java對象轉JSON時如何動態(tài)的增刪改查屬性的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • Spring深入刨析聲明式事務注解的源碼

    Spring深入刨析聲明式事務注解的源碼

    在spring注解中,使用聲明式事務,需要用到兩個核心的注解:@Transactional注解和@EnableTransactionManagement注解。將@Transactional注解加在方法上,@EnableTransactionManagement注解加在配置類上
    2022-07-07
  • 一文詳解如何使用線程池來優(yōu)化我們的應用程序

    一文詳解如何使用線程池來優(yōu)化我們的應用程序

    線程池是一種工具,但并不是適用于所有場景。在使用線程池時,我們需要根據(jù)應用程序的性質、計算資源的可用性和應用程序的需求進行適當?shù)呐渲?。本文主要介紹了如何使用線程池來優(yōu)化我們的應用程序,需要的可以參考一下
    2023-04-04
  • Java8新特性Stream短路終端操作實例解析

    Java8新特性Stream短路終端操作實例解析

    這篇文章主要介紹了Java8新特性Stream短路終端操作實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • 如何將Mybatis連接到ClickHouse

    如何將Mybatis連接到ClickHouse

    這篇文章主要介紹了如何將Mybatis連接到ClickHouse,幫助大家更好得理解和學習使用Mybatis,感興趣的朋友可以了解下
    2021-03-03
  • JavaWeb-WebSocket瀏覽器服務器雙向通信方式

    JavaWeb-WebSocket瀏覽器服務器雙向通信方式

    文章介紹了WebSocket協(xié)議的工作原理和應用場景,包括與HTTP的對比,接著,詳細介紹了如何在Java中使用WebSocket,包括配置類、服務編寫和前端頁面的實現(xiàn)
    2025-02-02
  • idea中報錯不支持發(fā)行版本問題及解決

    idea中報錯不支持發(fā)行版本問題及解決

    在使用Spring框架進行項目開發(fā)時,有時會遇到因JDK版本不一致導致的項目運行錯誤,解決此問題的方法主要有兩步:首先,確保項目的Project和Modules設置中的JDK版本一致;其次,在IDE的Settings中找到Java?Compiler
    2024-11-11
  • springboot調用HTML文件注意事項及說明

    springboot調用HTML文件注意事項及說明

    這篇文章主要介紹了springboot調用HTML文件注意事項及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • java中forward轉發(fā)的使用

    java中forward轉發(fā)的使用

    在Java中,forward轉發(fā)是一種非常常見且重要的操作,我們將深入探討forward的概念和用法,并給出一些代碼示例來幫助讀者更好地理解,感興趣的可以了解下
    2023-11-11

最新評論