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

解讀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)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • jar包運行時提示jar中沒有主清單屬性的解決

    jar包運行時提示jar中沒有主清單屬性的解決

    這篇文章主要介紹了jar包運行時提示jar中沒有主清單屬性的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • WebUploader客戶端批量上傳圖片 后臺使用springMVC

    WebUploader客戶端批量上傳圖片 后臺使用springMVC

    這篇文章主要為大家詳細介紹了WebUploader客戶端批量上傳圖片,后臺使用springMVC接收實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • 詳解在springboot中使用Mybatis Generator的兩種方式

    詳解在springboot中使用Mybatis Generator的兩種方式

    這篇文章主要介紹了詳解在springboot中使用Mybatis Generator的兩種方式,本文將介紹到在springboot的項目中如何去配置和使用MBG以及MBG生成代碼的兩種方式,非常具有實用價值,需要的朋友可以參考下
    2018-11-11
  • SpringBoot通過Filter實現(xiàn)整個項目接口的SQL注入攔截詳解

    SpringBoot通過Filter實現(xiàn)整個項目接口的SQL注入攔截詳解

    這篇文章主要介紹了SpringBoot通過Filter實現(xiàn)整個項目接口的SQL注入攔截詳解,SQL注入是比較常見的網(wǎng)絡攻擊方式之一,在客戶端在向服務器發(fā)送請求的時候,sql命令通過表單提交或者url字符串拼接傳遞到后臺持久層,最終達到欺騙服務器執(zhí)行惡意的SQL命令,需要的朋友可以參考下
    2023-12-12
  • Java分布式事務管理框架之Seata

    Java分布式事務管理框架之Seata

    這篇文章主要介紹了Java分布式事務框架Seata,分布式事務是指事務的參與者、支持事務的服務器、資源服務器以及事務管理器分別位于不同的分布式系統(tǒng)的不同節(jié)點之上
    2022-07-07
  • springboot中生成文件路徑的問題及解決方法

    springboot中生成文件路徑的問題及解決方法

    這篇文章主要介紹了springboot中生成文件路徑的問題及解決方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • IDEA?中使用?Hudi的示例代碼

    IDEA?中使用?Hudi的示例代碼

    這篇文章主要介紹了IDEA?中使用?Hudi的相關知識,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • MyBatis-Plus中使用Wrapper自定義SQL的詳細步驟

    MyBatis-Plus中使用Wrapper自定義SQL的詳細步驟

    在 MyBatis-Plus 中使用 Wrapper 自定義 SQL 可以靈活組合條件并復用條件邏輯,通過 ${ew.customSqlSegment} 占位符注入 Wrapper 生成的 SQL 片段,本文給大家介紹了詳細步驟和示例,需要的朋友可以參考下
    2025-07-07
  • java定時任務cron表達式每周執(zhí)行一次的坑及解決

    java定時任務cron表達式每周執(zhí)行一次的坑及解決

    這篇文章主要介紹了java定時任務cron表達式每周執(zhí)行一次的坑及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Java常用類庫Apache Commons工具類說明及使用實例詳解

    Java常用類庫Apache Commons工具類說明及使用實例詳解

    這篇文章主要介紹了Java常用類庫Apache Commons工具類說明及使用實例詳解,需要的朋友可以參考下
    2020-02-02

最新評論

融水| 隆昌县| 博爱县| 麟游县| 陈巴尔虎旗| 志丹县| 合水县| 江安县| 宁远县| 井冈山市| 神木县| 长顺县| 中牟县| 福安市| 孟津县| 山西省| 韩城市| 兰考县| 大庆市| 富平县| 临朐县| 崇明县| 宁河县| 临澧县| 河西区| 彭州市| 体育| 屏山县| 辛集市| 新余市| 察哈| 合川市| 宁波市| 英超| 长乐市| 斗六市| 衡南县| 浪卡子县| 庄河市| 连江县| 桐柏县|