Spring 源碼學習 02:關於 Spring IoC 和 Bean 的概念

前言

在前一篇文章中介紹瞭如何構建源碼閱讀環境,既然構建好了源碼環境,本地也能夠正常運行,那就開始閱讀源碼吧!html

在閱讀源碼時,會參考官方文檔,不少概念在官網均可以獲得答案,有興趣的小夥伴們能夠繼續閱讀,當作複習,寫的不足之處,但願多多指導。java

IoC 和 DI

IoC 概念

IoC

IoC(Inversion of Control),即控制反轉。spring

以前是在對象內部 new 建立其餘對象,而後使用。ide

而如今 Spring 中有一個容器能夠在建立管理這些對象,而且將對象依賴的其餘對象注入到這個對象中,這些對象的建立、銷燬都由 Spring 進行管理。學習

相比之前來講,再也不由本身控制其餘對象的生命週期,這個過程就叫作控制反轉。而負責統一管理這些類的容器就叫作 IoC 容器。spa

DI

IoC is also known as dependency injection (DI). code

是否是感受奇奇怪怪的,爲何說:IoC 也稱爲 DIhtm

其實 IoC 和 DI 是同一個概念的不一樣角度描述。對象

依賴注入是指組件之間的依賴關係由容器在運行期決定,形象的說,即由容器動態的將某個依賴關係注入到組件之中。blog

經過依賴注入機制,咱們只須要經過簡單的配置,而無需任何代碼就可指定目標須要的資源,完成自身的業務邏輯,而不須要關心具體的資源來自何處,由誰實現。

Spring 是經過 DI 實現 IoC 的。

Container 和 Bean

Spring IoC container and Bean

Bean 是一個由 Spring IoC 容器實例化,組裝和管理的對象。

相信你們都寫過或者見過下面的代碼:

/**
 * 從容器中獲取對象
 * @author liuzhihang
 * @date 2020/4/6 19:02
 */
@Component
public class CustomBeanFactory implements ApplicationContextAware {

    private static ApplicationContext ctx;

    @Override
    public void setApplicationContext(ApplicationContext ac) throws BeansException {

        ctx = ac;
    }

    public static Object getBean(String beanName) {

        return ctx.getBean(beanName);
    }
}

代碼邏輯很簡單,就是從容器中獲取到指定名稱的 Bean,而其中 ApplicationContext 接口其實就是 Spring IoC 容器。

固然 ApplicationContext 是一個接口,它有不少實現,而它也繼承了 BeanFactory

BeanFactory or ApplicationContext

雖然 BeanFactory 是 IoC 容器的最基本的形式,可是 ApplicationContext 對其進行了不少擴展,並具備 BeanFactory 的全部功能,一般建議優先使用 ApplicationContext

總結

在經過Spring 官網 瞭解了 IoC 、DI 、容器和 Bean 的概念後,再結合日常的使用基本上能夠有個大概流程。

流程猜測

固然,這只是一個很粗略的猜測,是否正確,還有待後面繼續閱讀源碼,而後去驗證。

相關推薦

相關文章
相關標籤/搜索