IOC(Inversion of Control) 控制反轉

IOC

  • Spring 中 Bean 工廠裏面的 Map 存儲結構(存儲了 Bean 的實例)。

Spring API 體系結構

在這裏插入圖片描述

BeanFactory 與 ApplicationContext 的區別

BeanFactory 纔是 Spring 容器中的頂層接口。
ApplicationContext 是它的子接口。
BeanFactory 和 ApplicationContext 的區別:
	創建對象的時間點不一樣。
		ApplicationContext:適用於單例對象
			只要一讀取配置文件,默認情況下就會創建對象。
		BeanFactory:適用於多例對象
			什麼使用什麼時候創建對象。

ApplicationContext 接口的實現類

FileSystemXmlApplicationContext:配置文件在本地磁盤上,使用該類加載。	
ClassPathXmlApplicationContext :配置文件在classpath中,使用此類加載。
AnnotationConfigApplicationContext:	當我們使用註解配置容器對象時,需要使用此類來創建 spring 容器。它用來讀取註解。

bean

bean 標籤

作用:
	用於配置對象讓 spring 來創建的。		
	默認情況下它調用的是類中的無參構造函數。如果沒有無參構造函數則不能創建成功。	
		
屬性:	
	id:給對象在容器中提供一個唯一標識。用於獲取對象。
	class:指定類的全限定類名。用於反射創建對象。默認情況下調用無參構造函數。
	scope:指定對象的作用範圍。
		* singleton :默認值,單例的.
		* prototype :多例的.
		* request  :WEB 項目中,Spring 創建一個 Bean 的對象,將對象存入到 request 域中.
		* session  :WEB 項目中,Spring 創建一個 Bean 的對象,將對象存入到 session 域中.
		* global session  :WEB 項目中,應用在 Portlet 環境.如果沒有 Portlet 環境那麼
	globalSession 相當於 session.
	init-method:指定類中的初始化方法名稱。
	destroy-method:指定類中銷燬方法名稱。
	靜態工廠
		factory-method:指定生產對象的靜態方法
	實例工廠
		factory-bean 屬性:用於指定實例工廠 bean 的 id。
		factory-method 屬性:用於指定實例工廠中創建對象的方法。
	依賴注入
		構造函數
		constructor-arg				
			* name:指定參數在構造函數中的名稱
			* value:它能賦的值是基本數據類型和 String 類型
			* ref:它能賦的值是其他 bean 類型,也就是說,必須得是在配置文件中配置過的 bean
		Set方法
		property
			* name:找的是類中 set 方法後面的部分				
			* value:給屬性賦值是基本數據類型和 string 類型的
			* ref:給屬性賦值是其他 bean 類型的
			注入集合屬性
			List 結構的:
				array,list,set
			Map 結構的
				map,entry,props,prop
					* value
bean 的作用範圍和生命週期
	單例對象:scope="singleton"
		一個應用只有一個對象的實例。它的作用範圍就是整個引用。
	生命週期:
		對象出生:當應用加載,創建容器時,對象就被創建了。
		對象活着:只要容器在,對象一直活着。
		對象死亡:當應用卸載,銷燬容器時,對象就被銷燬了。
	多例對象:scope="prototype"
		每次訪問對象時,都會重新創建對象實例。
		生命週期:
		對象出生:當使用對象時,創建新的對象實例。
		對象活着:只要對象在使用中,就一直活着。
		對象死亡:當對象長時間不用時,被 java 的垃圾回收器回收了。

實例化 bean 的三種方式

默認無參構造

實現類

public class UserServiceImpl implements UserService {
    private UserDao dao = new UserDaoimpl();    
    public void saveUser() {
        dao.saveUser();
    }
}

配置文件

<!--在默認情況下:它會根據默認無參構造函數來創建類對象。如果 bean 中沒有默認無參構造函數,將會創建失敗。-->
<bean id="UserService" 
class="com.itheima.service.impl.UserServiceImpl"></bean>
管理靜態工廠

實現類

public class StaticFactory { 
	public static IAccountService createAccountService(){
		return new AccountServiceImpl();
	}
}

配置文件

<!-- 此種方式是:使用 StaticFactory 類中的靜態方法 createAccountService 創建對象,並存入 spring 容器-->
<bean id="accountService"
class="com.itheima.factory.StaticFactory"
	factory-method="createAccountService"></bean>
管理實例工廠

實現類

public class InstanceFactory {
	public IAccountService createAccountService(){
		return new AccountServiceImpl();
	}
}

配置文件

<bean id="instancFactory" class="com.itheima.factory.InstanceFactory"></bean>
<bean id="accountService"
	factory-bean="instancFactory"
	factory-method="createAccountService"></bean>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章