2016-12-08
1.環(huán)境準(zhǔn)備
開發(fā)環(huán)境:Intellij 2016.3
Spring版本:4.2.5
2.創(chuàng)建工程
1.使用Intellij創(chuàng)建個maven工程
2.配置pom.xml文件,引入對Spring的依賴

3.Spring核心基礎(chǔ)介紹
3.1 Dependency Injection and Inversion of Control---依賴注入和控制反轉(zhuǎn)
首先明確一個觀點(diǎn),依賴注入和控制反轉(zhuǎn)本質(zhì)上所指的是同一件事情,只是從不同的角度來看的時候給出了不同定義。
我們在實現(xiàn)一個功能或某個復(fù)雜的業(yè)務(wù)系統(tǒng)的時候,通常會使用兩個或兩個以上的多個類組合協(xié)調(diào)來實現(xiàn)。如以下代碼所示,A類依賴了C類,當(dāng)我們在構(gòu)建A類的時候,如果沒有IoC容器幫我們實現(xiàn)注入的情況下,通常需要new C(),然后再進(jìn)行A類的構(gòu)建。但是當(dāng)有了Spring的IoC容器后,我們就不需要在關(guān)注于對象的創(chuàng)建和管理了,可以集中精力在業(yè)務(wù)邏輯的實現(xiàn)中。
public class C {
}
public class A {
private C c;
public A(C c){this.c = c;}
}
以下內(nèi)容摘自控制反轉(zhuǎn)(IOC)和依賴注入(DI)的區(qū)別,感謝作者的文章。
理解這依賴注入和控制反轉(zhuǎn)這兩個概念,需要搞明白的問題有:
- 依賴注入和控制反轉(zhuǎn)過程的參與者都有誰?
- 依賴注入:誰依賴于誰,為什么需要依賴?
- 依賴注入:誰注入了誰,為什么需要注入?
- 控制反轉(zhuǎn):誰控制了誰,控制的是什么?
- 控制反轉(zhuǎn):為什么叫反轉(zhuǎn)?
下面逐一搞明白上面的問題:
- 依賴注入和控制反轉(zhuǎn)的一般包含了三個方面的參與者,一是對象,二是IoC容器,三是對象依賴的外部資源(包含對象需要的其他對象、或者是對象需要的文件資源等等,例如上面的A類需要C類對象)
- 對象依賴于IoC容器,需要IoC容器為對象提供依賴的外部資源
- IoC容器注入了對象,注入的是對象依賴的外部資源
- IoC容器控制了對象,控制對象實例的創(chuàng)建
- 反轉(zhuǎn)是相對于正常創(chuàng)建對象的流程來說,如果需要某個對象,我們?nèi)?chuàng)建對象的實例,但是反轉(zhuǎn)來說,對象實例的獲取我們可以直接從IoC容器中獲得
注:
依賴注入
是從應(yīng)用程序的角度描述:應(yīng)用程序依賴容器創(chuàng)建并注入它所需要的外部資源;
控制反轉(zhuǎn)
是從容器的角度描述:容器控制應(yīng)用程序,由容器反向地向應(yīng)用程序注入應(yīng)用程序所需要的外部資源
3.2 Spring IoC容器的實現(xiàn)
IoC容器是一種思想,它在Spring中是什么樣的呢?經(jīng)常使用的BeanFactory和ApplicationContext可以看成是容器的具體表現(xiàn)形式。深入Spring的源碼中,可以發(fā)現(xiàn)IoC容器實際上是一系列功能各異的容器產(chǎn)品。BeanFactory接口規(guī)范定義了容易的基本功能。關(guān)于實現(xiàn)該接口的IoC容器類在后續(xù)的源碼閱讀中再進(jìn)行整理和介紹。

4 源碼搭建閱讀工程spring-demo
4.1 下載源碼
在第二節(jié)中介紹了在Intellij中創(chuàng)建maven工程后,然后配置pom.xml文件,下載Spring源碼jar包可以在IDE中很方便執(zhí)行。點(diǎn)擊如圖右側(cè)的[maven projects],在Dependencies中選中要下載源碼的jar包,右鍵可以選擇Download Sources.

4.2 寫個簡單的POJO類
package com.spring.study.domain;
public class Person {
private int age;
private String name;
public int getAge() {return age;}
public void setAge(int age) {this.age = age;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
public String toString() {
return "[Person], age is :" + age + "; name is :" + name;
}
}
4.3 Bean配置文件
創(chuàng)建個bean.xml文件放到resources目錄下。

4.4 編寫用于調(diào)試源碼的類
package com.spring.study.domain;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class Test {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");
Person p = ctx.getBean("person", Person.class);
System.out.println(p);
}
}
4.5 斷點(diǎn)運(yùn)行代碼進(jìn)入Spring的源碼
附張效果圖

4.6 使用Intellij生成UML圖

第一次在簡書寫文章,感謝這么好的平臺。??
參考文章