亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Spring IOC 三種配置方式詳解

 更新時(shí)間:2024年05月11日 09:53:06   作者:黑影白  
這篇文章主要介紹了Spring IOC 三種配置方式,基于xml配置方式組件管理,基于注解方式管理和配置類(lèi)方式管理,這三種方式,通過(guò)圖文講解的非常詳細(xì),需要的朋友可以參考下

1 基于xml配置方式組件管理

1. 所有內(nèi)容寫(xiě)到xml格式配置文件中

2. 聲明bean通過(guò)<bean標(biāo)簽

3. <bean標(biāo)簽包含基本信息(id,class)和屬性信息 <property name value / ref

4. 引入外部的properties文件可以通過(guò)<context:property-placeholder

<property> 是在 Spring XML 配置文件中用來(lái)設(shè)置 bean 的屬性值的元素。在上下文中,它通常作為 <bean> 元素的子元素出現(xiàn)。通過(guò) <property> 元素可以設(shè)置 bean 的屬性,使得 Spring 容器在創(chuàng)建 bean 實(shí)例時(shí)可以自動(dòng)將這些屬性值注入到 bean 中。

例如,在上面提到的配置中,使用了 <property> 元素設(shè)置了數(shù)據(jù)源的 URL、驅(qū)動(dòng)類(lèi)名、用戶(hù)名和密碼等屬性值。其基本結(jié)構(gòu)如下:

id 屬性指定了 bean 的唯一標(biāo)識(shí)符。

class 屬性指定了 bean 的類(lèi)型。

<property> 元素用于設(shè)置 bean 的屬性值,name 屬性指定了屬性名,value 屬性指定了屬性值。

使用 <property> 元素可以完成對(duì)各種類(lèi)型屬性的設(shè)置,例如基本數(shù)據(jù)類(lèi)型、引用類(lèi)型(如其他 bean)、集合類(lèi)型等。

5. IoC具體容器實(shí)現(xiàn)選擇ClassPathXmlApplicationContext對(duì)象

在 Spring 中,IoC 容器是負(fù)責(zé)實(shí)例化、配置和組裝 bean 的核心容器。ClassPathXmlApplicationContext 是 Spring 提供的 IoC 容器實(shí)現(xiàn)之一,它從類(lèi)路徑下的 XML 配置文件中讀取配置信息,并根據(jù)配置創(chuàng)建相應(yīng)的 bean 實(shí)例

如圖:

實(shí)現(xiàn)方式:

  • 優(yōu)點(diǎn):XML配置方式提供了清晰的、結(jié)構(gòu)化的方式來(lái)描述Bean之間的依賴(lài)關(guān)系。它非常適合大型項(xiàng)目,其中可能有數(shù)百個(gè)Bean需要配置。此外,XML配置提供了良好的可讀性和可維護(hù)性,因?yàn)樗械呐渲枚技性谝粋€(gè)或多個(gè)XML文件中。
  • 缺點(diǎn):XML配置可能會(huì)變得相當(dāng)冗長(zhǎng)和復(fù)雜,特別是當(dāng)項(xiàng)目中的Bean數(shù)量增加時(shí)。此外,XML配置是靜態(tài)的,這意味著在運(yùn)行時(shí)更改配置可能會(huì)比較困難。

2 基于注解方式管理

1. 注解負(fù)責(zé)標(biāo)記IoC的類(lèi)和進(jìn)行屬性裝配

2. xml文件依然需要,需要通過(guò)<context:component-scan標(biāo)簽指定注解范圍

3. 標(biāo)記IoC注解:@Component,@Service,@Controller,@Repository 

  1. @Component
    • 這是最通用的Spring組件注解,標(biāo)識(shí)一個(gè)類(lèi)為Spring組件。被@Component注解的類(lèi)將會(huì)作為候選組件被Spring的上下文進(jìn)行掃描和自動(dòng)配置。
    • 它不攜帶任何特殊的語(yǔ)義信息,僅僅表明該類(lèi)是一個(gè)Spring組件。
  2. @Service
    • 用于標(biāo)識(shí)業(yè)務(wù)邏輯層的組件(如服務(wù)類(lèi))。
    • @Service@Component的一個(gè)特殊化版本,它提供了更加明確的語(yǔ)義,表明這個(gè)類(lèi)是一個(gè)服務(wù)組件。
    • 通常,服務(wù)層負(fù)責(zé)實(shí)現(xiàn)業(yè)務(wù)邏輯,調(diào)用數(shù)據(jù)訪(fǎng)問(wèn)層(由@Repository標(biāo)識(shí)的組件)來(lái)獲取數(shù)據(jù),并可能將結(jié)果傳遞給表示層(由@Controller標(biāo)識(shí)的組件)。
  3. @Controller
    • 用于標(biāo)識(shí)Web應(yīng)用中的控制器組件。
    • @Controller@Component的一個(gè)特殊化版本,用于處理HTTP請(qǐng)求,通常與Spring MVC一起使用。
    • 在控制器中,你可以定義方法來(lái)處理特定的HTTP請(qǐng)求,并返回視圖名稱(chēng)或響應(yīng)體。
  4. @Repository
    • 用于標(biāo)識(shí)數(shù)據(jù)訪(fǎng)問(wèn)層的組件(如DAO類(lèi))。
    • @Repository@Component的一個(gè)特殊化版本,它提供了更加明確的語(yǔ)義,表明這個(gè)類(lèi)是一個(gè)數(shù)據(jù)訪(fǎng)問(wèn)組件。
    • 在數(shù)據(jù)訪(fǎng)問(wèn)層,你可以定義方法來(lái)訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)、執(zhí)行CRUD操作等。
    • Spring提供了額外的異常轉(zhuǎn)換功能,可以將來(lái)自數(shù)據(jù)訪(fǎng)問(wèn)層的異常轉(zhuǎn)換為DataAccessException類(lèi)型的異常,這使得開(kāi)發(fā)者可以更容易地處理這些異常。

4. 標(biāo)記DI注解:@Autowired @Qualifier @Resource @Value

  1. @Autowired
    • @Autowired 是Spring提供的一個(gè)注解,用于自動(dòng)裝配bean。它可以自動(dòng)裝配構(gòu)造器、setter方法或字段。當(dāng)Spring容器在創(chuàng)建bean時(shí),如果bean中包含了使用@Autowired注解的屬性或方法,Spring容器將自動(dòng)查找匹配的bean進(jìn)行注入。
    • 如果存在多個(gè)相同類(lèi)型的bean,Spring將不知道要注入哪一個(gè),這時(shí)就需要使用@Qualifier注解來(lái)指定要注入的bean的名稱(chēng)。
    • 默認(rèn)情況下,@Autowired是必需的(即如果找不到匹配的bean,則會(huì)拋出異常)。但是,你可以通過(guò)@Autowired(required = false)來(lái)指定注入是可選的。
  2. @Qualifier
    • @Qualifier 通常與@Autowired一起使用,用于消除多個(gè)相同類(lèi)型bean的歧義。當(dāng)Spring容器中存在多個(gè)相同類(lèi)型的bean時(shí),你可以使用@Qualifier注解來(lái)指定要注入的bean的名稱(chēng)。
    • @Qualifier可以用在方法、字段或構(gòu)造器參數(shù)的上面,但最常見(jiàn)的用法是結(jié)合@Autowired一起使用在字段或setter方法上。
  3. @Resource
    • @Resource 是Java EE提供的注解,用于注入資源,如JavaBean、數(shù)據(jù)源等。在Spring中,它也可以用于自動(dòng)裝配bean。
    • @Resource可以指定要注入的bean的名稱(chēng)(通過(guò)name屬性)或類(lèi)型(通過(guò)type屬性)。如果同時(shí)指定了nametype,Spring將首先按name查找,然后按type查找。
    • @Resource的一個(gè)優(yōu)點(diǎn)是,即使沒(méi)有匹配的bean,它也不會(huì)拋出異常(這取決于@Resource的具體用法和配置)。
  4. @Value
    • @Value 注解用于注入SpEL(Spring Expression Language)表達(dá)式、屬性文件中的值或字面量值。
    • 你可以使用@Value來(lái)注入基本類(lèi)型、字符串、其他bean的屬性或SpEL表達(dá)式的結(jié)果。
    • 例如,你可以使用@Value("${some.property}")來(lái)注入屬性文件中的值,或者使用@Value("#{someBean.someProperty}")來(lái)注入其他bean的屬性值。

5. IoC具體容器實(shí)現(xiàn)選擇ClassPathXmlApplicationContext對(duì)象

如圖:

調(diào)用:

  • 優(yōu)點(diǎn):注解配置方式將配置信息直接嵌入到Java代碼中,使得代碼和配置更加緊密地結(jié)合在一起。這減少了配置文件的數(shù)量,使得項(xiàng)目更加簡(jiǎn)潔。此外,注解配置支持在運(yùn)行時(shí)動(dòng)態(tài)地修改配置,這增加了靈活性。
  • 缺點(diǎn):過(guò)度使用注解可能會(huì)導(dǎo)致代碼混亂和難以維護(hù)。此外,注解配置不如XML配置直觀(guān),可能需要更多的時(shí)間來(lái)學(xué)習(xí)和理解。

3 配置類(lèi)方式管理

1. 完全注解方式指的是去掉xml文件,使用配置類(lèi) + 注解實(shí)現(xiàn)

2. xml文件替換成使用@Configuration注解標(biāo)記的類(lèi)

3. 標(biāo)記IoC注解:@Component,@Service,@Controller,@Repository 

4. 標(biāo)記DI注解:@Autowired @Qualifier @Resource @Value

5. <context:component-scan標(biāo)簽指定注解范圍使用@ComponentScan(basePackages ={"com.atguigu.components"})替代

6. <context:property-placeholder引入外部配置文件使用@PropertySource({"classpath:application.properties","classpath:jdbc.properties"})替代

7. <bean 標(biāo)簽使用@Bean注解和方法實(shí)現(xiàn)

8. IoC具體容器實(shí)現(xiàn)選擇AnnotationConfigApplicationContext對(duì)象

配置類(lèi):

調(diào)用:

  • 優(yōu)點(diǎn):JavaConfig配置方式使用Java類(lèi)來(lái)定義Bean及其依賴(lài)關(guān)系,這使得配置更加類(lèi)型安全,并且易于使用IDE的功能(如自動(dòng)補(bǔ)全和重構(gòu))。此外,JavaConfig配置支持在運(yùn)行時(shí)動(dòng)態(tài)地修改配置,并且可以與XML和注解配置混合使用。
  • 缺點(diǎn):JavaConfig配置需要編寫(xiě)額外的Java代碼來(lái)定義Bean和依賴(lài)關(guān)系,這可能會(huì)增加項(xiàng)目的復(fù)雜性。此外,JavaConfig配置可能不如XML配置直觀(guān),特別是對(duì)于初學(xué)者來(lái)說(shuō)。

以上就是Spring IOC 三種配置方式詳解的詳細(xì)內(nèi)容,更多關(guān)于Spring IOC配置的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Spring MVC文件配置以及參數(shù)傳遞示例詳解

    Spring MVC文件配置以及參數(shù)傳遞示例詳解

    這篇文章主要給大家介紹了關(guān)于Spring MVC文件配置以及參數(shù)傳遞的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • IDEA中maven依賴(lài)報(bào)紅的問(wèn)題解決辦法

    IDEA中maven依賴(lài)報(bào)紅的問(wèn)題解決辦法

    這篇文章主要給大家介紹了關(guān)于IDEA中maven依賴(lài)報(bào)紅的問(wèn)題解決辦法,在使用IDEA過(guò)程中,經(jīng)常會(huì)出現(xiàn)maven依賴(lài)報(bào)紅的問(wèn)題,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • Maven配置倉(cāng)庫(kù)、阿里云鏡像、環(huán)境變量(史上最全)

    Maven配置倉(cāng)庫(kù)、阿里云鏡像、環(huán)境變量(史上最全)

    本文主要介紹了Maven配置倉(cāng)庫(kù)、阿里云鏡像、環(huán)境變量,文中通過(guò)圖文示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • RabbitMQ消息隊(duì)列中的Channel信道參數(shù)詳解

    RabbitMQ消息隊(duì)列中的Channel信道參數(shù)詳解

    這篇文章主要介紹了RabbitMQ消息隊(duì)列中的Channel信道參數(shù)詳解,信道是生產(chǎn)消費(fèi)者與rabbit通信的渠道,生產(chǎn)者publish或者消費(fèi)者消費(fèi)一個(gè)隊(duì)列都是需要通過(guò)信道來(lái)通信的,信道是建立在TCP上面的虛擬鏈接,需要的朋友可以參考下
    2023-08-08
  • java連接mysql數(shù)據(jù)庫(kù)實(shí)現(xiàn)單條插入和批量插入

    java連接mysql數(shù)據(jù)庫(kù)實(shí)現(xiàn)單條插入和批量插入

    這篇文章主要為大家詳細(xì)介紹了java連接mysql數(shù)據(jù)庫(kù)實(shí)現(xiàn)單條插入和批量插入,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • springboot2.x集成swagger的方法示例

    springboot2.x集成swagger的方法示例

    這篇文章主要介紹了springboot2.x集成swagger的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • java使用泛型實(shí)現(xiàn)棧結(jié)構(gòu)示例分享

    java使用泛型實(shí)現(xiàn)棧結(jié)構(gòu)示例分享

    泛型是Java SE5.0的重要特性,使用泛型編程可以使代碼獲得最大的重用。由于在使用泛型時(shí)要指明泛型的具體類(lèi)型,這樣就避免了類(lèi)型轉(zhuǎn)換。本實(shí)例將使用泛型來(lái)實(shí)現(xiàn)一個(gè)棧結(jié)構(gòu),并對(duì)其進(jìn)行測(cè)試
    2014-03-03
  • 純注解版spring與mybatis的整合過(guò)程

    純注解版spring與mybatis的整合過(guò)程

    這篇文章主要介紹了純注解版spring與mybatis的整合過(guò)程,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • mybatis批量添加,批量更新之前如何判斷是否已經(jīng)存在

    mybatis批量添加,批量更新之前如何判斷是否已經(jīng)存在

    這篇文章主要介紹了mybatis批量添加,批量更新之前如何判斷是否已經(jīng)存在,具有很好的參考價(jià)值,希望對(duì)的有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • java導(dǎo)出csv格式文件的方法

    java導(dǎo)出csv格式文件的方法

    這篇文章主要為大家詳細(xì)介紹了java導(dǎo)出csv格式文件的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12

最新評(píng)論