Java Spring IoC容器示例

簡而言之,IoC容器負責實例化/創建和配置對象並組裝對象之間的依賴關係。

您可能想知道IoC容器如何接收數據並執行上述操作,答案來自三個地方中的一個: XML文件、 Java 代碼或 Java 註釋。

IoC容器是Spring中的一個框架,用於管理POJO(普通的舊Java對象)的生命週期,並在需要時將其插入Java程序中。

通常,Java對象通過兩種方式聲明其依賴項:

  1. 將它們作爲參數傳遞給構造函數
  2. 通過將它們作爲對象的 setter 方法的參數傳遞

Spring 的 IoC 容器基於兩個包:org.springframework.beansorg.springframework.context

Beanfactory 接口管理許多 bean,同時,這些 bean 之間存在依賴關係。它提供了基本功能,更重要的是,它提供了ApplicationContext,它是BeanFactory的子接口。在應用程序運行時,它是隻讀的;如果實現允許並管理Bean的生命週期,則可以重新加載它。

此時,依賴項不是由 Java 對象管理的,而是由框架管理的。 出現了倒置(如果你明白我的意思的話)。

配置元數據是指與我在本教程開頭提到的任務相關的指令——對象的實例化、配置和組裝。

IoC容器

從上面的圖片可以看出,實質上發生的是配置元數據 (對象的實例化、配置和組裝) ,並且 JOVOs 被傳遞到 IOC 容器(最有可能是 ApplicationContext 的實例)。

如何實例化ApplicationContext

ApplicationContext context = new ClassPathXmlApplicationContext("services.xml");

也可以將 ApplicationContext 看作是簡單的配置。 它從 XML 文件或註釋中加載“配置”。 需要在應用程序的開頭創建 ApplicationContext,以便它讀取應用程序需要讀取的所有內容。

如果您想知道的話,可以在應用程序中使用許多 ApplicationContexts。 您甚至可以讓它們從相同的配置文件中讀取。 這是個好習慣嗎? 這取決於你想要實現什麼。大多數人會建議將所有bean配置在一個位置(通過XML或另一個位置)並由單個應用程序加載上下文。

下面的示例取自原始的 Spring 文檔,您可以隨時查看它以深入瞭解 Spring。

services.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd">
  <!-- services -->
  <bean id="petStore"
        class="org.springframework.samples.jpetstore.services.PetStoreServiceImpl">
    <property name="accountDao" ref="accountDao"/>
    <property name="itemDao" ref="itemDao"/>
    <!-- additional collaborators and configuration for this bean go here -->
  </bean>
  <!-- more bean definitions for services go here -->
</beans>

同樣,您可以將 services.xml 看作一個配置文件,並將 ApplicationContext 加載 / 讀取它。

結論

當您可以使用簡單的 DI (Depedency Injection) 時,爲什麼還要使用IoC?

這裏有幾個原因:

  1. 高雅
  2. 易於在生產和測試模式之間進行更改(只需要改變配置)

但是有一個缺點,那就是有時候 IoC 容器的正確實現有點棘手。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章