Spring IOC 三種配置方式詳解
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
- @Component:
- 這是最通用的Spring組件注解,標識一個類為Spring組件。被
@Component
注解的類將會作為候選組件被Spring的上下文進行掃描和自動配置。 - 它不攜帶任何特殊的語義信息,僅僅表明該類是一個Spring組件。
- 這是最通用的Spring組件注解,標識一個類為Spring組件。被
- @Service:
- 用于標識業(yè)務(wù)邏輯層的組件(如服務(wù)類)。
@Service
是@Component
的一個特殊化版本,它提供了更加明確的語義,表明這個類是一個服務(wù)組件。- 通常,服務(wù)層負責實現(xiàn)業(yè)務(wù)邏輯,調(diào)用數(shù)據(jù)訪問層(由
@Repository
標識的組件)來獲取數(shù)據(jù),并可能將結(jié)果傳遞給表示層(由@Controller
標識的組件)。
- @Controller:
- 用于標識Web應(yīng)用中的控制器組件。
@Controller
是@Component
的一個特殊化版本,用于處理HTTP請求,通常與Spring MVC一起使用。- 在控制器中,你可以定義方法來處理特定的HTTP請求,并返回視圖名稱或響應(yīng)體。
- @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
- @Autowired
@Autowired
是Spring提供的一個注解,用于自動裝配bean。它可以自動裝配構(gòu)造器、setter方法或字段。當Spring容器在創(chuàng)建bean時,如果bean中包含了使用@Autowired
注解的屬性或方法,Spring容器將自動查找匹配的bean進行注入。- 如果存在多個相同類型的bean,Spring將不知道要注入哪一個,這時就需要使用
@Qualifier
注解來指定要注入的bean的名稱。 - 默認情況下,
@Autowired
是必需的(即如果找不到匹配的bean,則會拋出異常)。但是,你可以通過@Autowired(required = false)
來指定注入是可選的。
- @Qualifier
@Qualifier
通常與@Autowired
一起使用,用于消除多個相同類型bean的歧義。當Spring容器中存在多個相同類型的bean時,你可以使用@Qualifier
注解來指定要注入的bean的名稱。@Qualifier
可以用在方法、字段或構(gòu)造器參數(shù)的上面,但最常見的用法是結(jié)合@Autowired
一起使用在字段或setter方法上。
- @Resource
@Resource
是Java EE提供的注解,用于注入資源,如JavaBean、數(shù)據(jù)源等。在Spring中,它也可以用于自動裝配bean。@Resource
可以指定要注入的bean的名稱(通過name
屬性)或類型(通過type
屬性)。如果同時指定了name
和type
,Spring將首先按name
查找,然后按type
查找。@Resource
的一個優(yōu)點是,即使沒有匹配的bean,它也不會拋出異常(這取決于@Resource
的具體用法和配置)。
- @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)文章
Maven配置倉庫、阿里云鏡像、環(huán)境變量(史上最全)
本文主要介紹了Maven配置倉庫、阿里云鏡像、環(huán)境變量,文中通過圖文示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07RabbitMQ消息隊列中的Channel信道參數(shù)詳解
這篇文章主要介紹了RabbitMQ消息隊列中的Channel信道參數(shù)詳解,信道是生產(chǎn)消費者與rabbit通信的渠道,生產(chǎn)者publish或者消費者消費一個隊列都是需要通過信道來通信的,信道是建立在TCP上面的虛擬鏈接,需要的朋友可以參考下2023-08-08java連接mysql數(shù)據(jù)庫實現(xiàn)單條插入和批量插入
這篇文章主要為大家詳細介紹了java連接mysql數(shù)據(jù)庫實現(xiàn)單條插入和批量插入,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-08-08java使用泛型實現(xiàn)棧結(jié)構(gòu)示例分享
泛型是Java SE5.0的重要特性,使用泛型編程可以使代碼獲得最大的重用。由于在使用泛型時要指明泛型的具體類型,這樣就避免了類型轉(zhuǎn)換。本實例將使用泛型來實現(xiàn)一個棧結(jié)構(gòu),并對其進行測試2014-03-03mybatis批量添加,批量更新之前如何判斷是否已經(jīng)存在
這篇文章主要介紹了mybatis批量添加,批量更新之前如何判斷是否已經(jīng)存在,具有很好的參考價值,希望對的有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08