Spring的控制反轉(IoC)容器 (一)
一、Spring IoC容器和Bean簡介
IoC也稱為依賴注入(DI)。在此過程中,物件僅通過建構函式引數,工廠方法的引數或在構造或從工廠方法返回後在物件例項上設定的屬性來定義其依賴項(即,與它們一起使用的其他物件) 。然後,容器在建立bean時注入那些依賴項。此過程從根本上講是通過使用類的直接構造或諸如服務定位器模式之類的控制元件來控制其依賴項的例項化或位置的bean本身的逆過程(因此稱為Control的倒置)。
在Spring中,構成應用程式主幹並由Spring IoC容器管理的物件稱為bean。Bean是由Spring IoC容器例項化,組裝和管理的物件。否則,bean僅僅是應用程式中許多物件之一。
二、容器概述
org.springframework.context.ApplicationContext
介面代表Spring IoC容器,並負責例項化,配置和組裝Bean。容器通過讀取配置元資料獲取有關要例項化,配置和組裝哪些物件的指令。配置元資料以XML,Java批註或Java程式碼表示。它使您能夠表達組成應用程式的物件以及這些物件之間的豐富相互依賴關係。
1、配置元資料
Spring IoC容器使用一種形式的配置元資料。此配置元資料表示您作為應用程式開發人員如何告訴Spring容器例項化,配置和組裝應用程式中的物件。傳統上,配置元資料以簡單直觀的XML格式提供。
Spring配置由容器必須管理的至少一個(通常是一個以上)bean定義組成。基於XML的配置元資料將這些bean配置為<bean/>
頂級元素內的<beans/>
元素。Java配置通常@Bean
在@Configuration
類中使用帶註釋的方法。以下示例顯示了基於XML的配置元資料的基本結構:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"4 xsi:schemaLocation="http://www.springframework.org/schema/beans 5 https://www.springframework.org/schema/beans/spring-beans.xsd"> 6 7 <bean id="..." class="..."> 8 <!-- collaborators and configuration for this bean go here --> 9 </bean> 10 11 <bean id="..." class="..."> 12 <!-- collaborators and configuration for this bean go here --> 13 </bean> 14 15 <!-- more bean definitions go here --> 16 17 </beans>
2、例項化容器
提供給ApplicationContext
建構函式的一個或多個位置路徑是資源字串,可讓容器從各種外部資源(例如本地檔案系統,Java等)中載入配置元資料CLASSPATH
。
ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");
3、使用容器
該ApplicationContext
是一個維護bean定義以及相互依賴的登錄檔的高階工廠的介面。通過使用方法T getBean(String name, Class<T> requiredType)
,您可以檢索bean的例項。
將ApplicationContext
讓你讀bean定義和訪問它們,如下例所示:
// create and configure beans ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml"); // retrieve configured instance PetStoreService service = context.getBean("petStore", PetStoreService.class); // use configured instance List<String> userList = service.getUsernameList();
三、Bean的配置
1、別名
alias 設定別名 , 為bean設定別名 , 可以設定多個別名
<!--設定別名:在獲取Bean的時候可以使用別名獲取--> <alias name="userT" alias="userNew"/>
2、Bean的配置
<!--bean就是java物件,由Spring建立和管理--> <!-- id 是bean的識別符號,要唯一,如果沒有配置id,name就是預設識別符號 如果配置id,又配置了name,那麼name是別名 name可以設定多個別名,可以用逗號,分號,空格隔開 如果不配置id和name,可以根據applicationContext.getBean(.class)獲取物件; class是bean的全限定名=包名+類名 --> <bean id="hello" name="hello2 h2,h3;h4" class="com.kuang.pojo.Hello"> <property name="name" value="Spring"/> </bean>
3、import
團隊的合作通過import來實現 .
<import resource="{path}/beans.xml"/>