1. 程式人生 > 實用技巧 >IOC控制反轉

IOC控制反轉

概念

是面向物件程式設計中的一種設計原則,可以用來降低計算機程式碼之間的耦合度。其中最常見的方式叫做依賴注入(Dependency Injection,簡稱 DI),還有一種方式叫 “依賴查詢”(Dependency Lookup)。在spring中通過控制反轉,我們可以將原本手動new變成了spring框架通過反射機制例項化

執行過程

引入依賴

<dependencies>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-context</artifactId>
		<version>5.1.9.RELEASE</version>
	</dependency>
</dependencies>

建立配置檔案

<?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">
 </beans>

配置所有需要註冊到spring容器的Bean

<bean class="org.javaboy.Book" id="book"/>

載入這個配置類

public class Main {
	public static void main(String[] args) {
	ClassPathXmlApplicationContext ctx = new 
	ClassPathXmlApplicationContext("applicationContext.xml");
	}
}

ApplicationContext 是一個 介面,是 BeanFactory 這個介面的子介面,它擴充套件了 BeanFactory 這個介面,提供了額外附加的功能,而 BeanFactory 是管理 bean 物件的容器的根介面,我們是針對它的子介面 ClassPathXmlApplicationContext 做的例項化,目的是載入專案中的 Spring 的配置檔案,使 Spring 來管理我們定義的 bean 物件。

通過getBean方法,可以從容器中去獲取物件:

Book book = (Book) ctx.getBean("book"); 
System.out.println(book);

還可以使用FileSystemXmlApplicationContext

FileSystemXmlApplicationContext ctx = new FileSystemXmlApplicationContext("F:\\workspace5\\workspace\\spring\\spring-ioc\\src\\main\\resources\\applicationContext.xml");

註解配置

<context:component-scan base-package="com.wyan.dao"></context:component-scan>

context-component-scan 標籤,這是 Spring 框架自定義的 xml 標籤,通過 base-package 的屬性,指明需要被自動掃描例項化的類所在位置。

註解分類:

建立物件: 對應的就是在 xml 檔案中配置的一個 bean 標籤,可以定義 id、name、class 等屬性;

注入資料: 對應的就是在 bean 標籤下,使用 property 標籤給類中的依賴屬性賦值;

作用範圍: 對應的就是設定 bean 標籤的 scope 屬性,不設定預設也是單例;

生命週期: 對應的就是設定 bean 標籤的 init-method 和 destroy-method 方法。

@Component :一般用於通用元件的類上使用的註解;

@Service : 一般用於業務層類上使用的註解;

@Controller : 一般用於控制層類上使用的註解;

@Repository :一般用於持久層類上使用的註解。

註解注入規則

我們知道,Spring 這個容器本質是個 map 集合來儲存例項化後的物件。既然是個 map 集合,就應該對應的有 key 和 value。

我們都知道 value 肯定是例項化後的 bean ,那麼 key 是什麼呢?

注入規則

  1. 四種註解都支援 value 的屬性作為自定義的 bean id ;
  2. 如果 value 屬性沒有指定,那麼預設以類的簡單名稱(類名首字母小寫)作為 bean 物件的 id。

自定義 id 獲取例項

改造類上面的註解,設定自定的 id,更改的註解如下:

@Controll("uc")
@Service("us")
@Repository("ud")