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

解讀Spring配置與服務(wù)組件的關(guān)系和注入機(jī)制

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

1. 基本知識(shí)

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

1.1 配置類(@Configuration)

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

通常使用 @Configuration 注解標(biāo)記,表示這是一個(gè)配置類,Spring 將會(huì)掃描這些類并注冊(cè)其定義的 Bean

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

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

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

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

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

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

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

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

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

主要的功能如下:

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

1.3 依賴注入(Dependency Injection)

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

主要的方式有如下:

  • 構(gòu)造函數(shù)注入:通過(guò)構(gòu)造函數(shù)將依賴注入到 Bean 中
  • 這種方式通常是推薦的,因?yàn)樗梢源_保依賴在 Bean 創(chuàng)建時(shí)就被提供
@Service
public class MyService {
    private final AnotherService anotherService;

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

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

1.4 組件類(@Component)

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

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

用于標(biāo)記一個(gè)普通的組件類,可以是任意的類,不特定于服務(wù)、倉(cāng)庫(kù)等特定角色

2. 實(shí)戰(zhàn)

為更好展示實(shí)戰(zhàn)項(xiàng)目中的運(yùn)用,結(jié)合上述的知識(shí)點(diǎn)給予案例

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

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

2.1 配置類

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

2.2 實(shí)現(xiàn)類

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

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

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

2.3 接口類

這是一個(gè)接口,定義了服務(wù)的合同

public interface manongServiceI {

}

2.4 組件類

負(fù)責(zé)與 manongServiceI 進(jìn)行交互

默認(rèn)構(gòu)造函數(shù),通過(guò) Spring 的 @Autowired 注解注入依賴

@Component("manongClient")
public class manongClient {

    @Autowired(required = false)
    private manongServiceI jimuTokenService;

    @Autowired(required = false)
    private JmReportBaseConfig jmBaseConfig;

    public manongClient() {
    }
}

總結(jié)

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

相關(guān)文章

  • jar包運(yùn)行時(shí)提示jar中沒(méi)有主清單屬性的解決

    jar包運(yùn)行時(shí)提示jar中沒(méi)有主清單屬性的解決

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

    WebUploader客戶端批量上傳圖片 后臺(tái)使用springMVC

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

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

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

    SpringBoot通過(guò)Filter實(shí)現(xiàn)整個(gè)項(xiàng)目接口的SQL注入攔截詳解

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

    Java分布式事務(wù)管理框架之Seata

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

    springboot中生成文件路徑的問(wèn)題及解決方法

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

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

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

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

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

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

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

    Java常用類庫(kù)Apache Commons工具類說(shuō)明及使用實(shí)例詳解

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

最新評(píng)論

耿马| 饶河县| 丹江口市| 中阳县| 寿宁县| 新建县| 阿克苏市| 南和县| 南充市| 三原县| 涪陵区| 邵阳县| 修水县| 英超| 九江县| 云林县| 西昌市| 黄浦区| 康乐县| 海淀区| 綦江县| 景谷| 宣恩县| 土默特右旗| 平定县| 高要市| 吴桥县| 全南县| 长沙县| 科技| 日照市| 江津市| 雅江县| 盐城市| 郓城县| 黎城县| 安丘市| 金寨县| 霍邱县| 临朐县| 眉山市|