springIOC概念快速入門

個人學習方式是,學習一個東西,得有一個總體的框架,否則,我會受不了老是模仿着demo程序而不知道這個黑箱子裏頭究竟是什麼鬼的狀態,這樣簡直讓人抓狂。若是,你也像我這樣,建議多看一些博客,有個整體的概覽。這篇文章,講解我在初學spring時,哪些令我抓狂的概念。spring

  1. 依賴
  2. 工廠與容器

這就是這裏要圍繞講解的兩個內容。session

                                                                                                                

爲何要理解依賴。剛接觸spring,咱們最開始接觸的術語,應該是 「控制反轉ioc(inversion of control」);app

具體怎麼理解控制反轉,我以爲即便解釋也很難理解。有些書裏也說了,某某人提出了一個更容易理解的概念。ioc=ID(injection dependency )依賴注入。意思是說,一個類中,依賴於其餘類的「關係」,採用注入的形式,而不是採用 在「」類中本身編碼實現「」的形式 來完成依賴關係。框架

依賴注入:組件之間的依賴關係由容器在運行期決定 ,由容器動態的將某種依賴關係注入到組件之中 。 學習

依賴:依賴是一種 域對象 間的關係。與之類似的概念有 「關聯」,"聚合」等。深刻學習,能夠去看 《UML統一建模語言指南》。這裏舉一些例子來說解。編碼

//這裏不是依賴
public class Cat{
	Foot foot;
	Head head;
	Body body;	//組合
}
public class ClassOne{
	List<Student> studentList;	//聚合
	String className;
}
public class Order{
	String orderId;
	Product product;
	Int num;
	Customer customer; //關聯
}

好吧,這幾個跟依賴沒有關係。spa

public class StudentService{
	StudentDao dao = new StudentDaoImpl();
	public Student getStudentById(int id){
		dao.getStudentById(id);				//依賴
	}
}

這是依賴的一種,spring中的依賴不徹底等同於UML中的依賴,它將泛化的關係也當作依賴關係。code

主要想要表達的是:對象

  1. 依賴,是一種域對象之間的(引用)關係。
  2. 依賴,在沒有ioc概念出現以前,是經過手動的在類中建立如上例中,dao的建立,且dao的實現必須是肯定的。
  3. spring中,依賴經過「容器」來注入。(實際上其餘不少ioc容器也都使用反射來實現依賴注入)

                                                                                                                                                

你可能聽到這麼一句話,spring就是一個大的工廠。那麼,代碼層面上,是怎麼體現工廠的特性的呢。接口

首先來回顧下,咱們之前用過的工廠。

session=SessionFactory.open();
someObj=(AType)applicationContext.getBean("beanName");
object=beanFactory.getBean(object.Class);

public  class MyFactory{
	public person createPerson(){
		person=new Person();
		returne person;
	}
}
persn=(new MyFactory()).createPerson();

無非就是一個工廠的類,加一個工廠方法(靜態或非靜態,有參數或無參,但必定都有返回值);

而常說的spring中的ioc容器,也就是一個工廠,一個容器。

說是工廠,因此接口必須定義成:

public interface BeanFactory{
	<T> getBean(args...)       //這就是我要的工廠方法
}

而說是容器,是由於一個工廠,必須有原料啊。但這個接口並無裝原料的地方啊。

而咱們經常使用的類是ClassPathXMLAppliactionContext ,這個是這個工廠接口的某一級子類。

public class ClassPathXMLAppliactionContext{
	Map BeanMap;			//一些實體
	Map BeanDefination;		//實體的依賴關係的描述信息
	<T> getBean(args...)	//採用上述兩種材料來組裝出目標的 Bean;
}

然而,這個容器中,不只包含了生產實體的原材料,還包含一些環境,因此名稱中叫Context也是有環境的意義在裏面的吧。

相關文章
相關標籤/搜索