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

Spring IOC 三種配置方式詳解

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

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

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

2. 聲明bean通過<bean標簽

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

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

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

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

id 屬性指定了 bean 的唯一標識符。

class 屬性指定了 bean 的類型。

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

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

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

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

如圖:

實現(xiàn)方式:

  • 優(yōu)點:XML配置方式提供了清晰的、結(jié)構(gòu)化的方式來描述Bean之間的依賴關(guān)系。它非常適合大型項目,其中可能有數(shù)百個Bean需要配置。此外,XML配置提供了良好的可讀性和可維護性,因為所有的配置都集中在一個或多個XML文件中。
  • 缺點:XML配置可能會變得相當冗長和復(fù)雜,特別是當項目中的Bean數(shù)量增加時。此外,XML配置是靜態(tài)的,這意味著在運行時更改配置可能會比較困難。

2 基于注解方式管理

1. 注解負責標記IoC的類和進行屬性裝配

2. xml文件依然需要,需要通過<context:component-scan標簽指定注解范圍

3. 標記IoC注解:@Component,@Service,@Controller,@Repository 

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

4. 標記DI注解:@Autowired @Qualifier @Resource @Value

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

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

如圖:

調(diào)用:

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

3 配置類方式管理

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

2. xml文件替換成使用@Configuration注解標記的類

3. 標記IoC注解:@Component,@Service,@Controller,@Repository 

4. 標記DI注解:@Autowired @Qualifier @Resource @Value

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

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

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

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

配置類:

調(diào)用:

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

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

相關(guān)文章

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

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

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

    IDEA中maven依賴報紅的問題解決辦法

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

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

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

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

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

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

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

    springboot2.x集成swagger的方法示例

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

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

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

    純注解版spring與mybatis的整合過程

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

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

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

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

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

最新評論