面試官:說說Spring中IoC實現原理?

IoC(Inversion of Control)即控制(權)反轉,它是一種編程思想,它的核心理念是將對象的創建和管理權力從對象本身轉移到外部的容器或框架。

IoC 的主要目的是降低代碼之間的耦合度,提高代碼的重用性、可測試性和靈活性。在 IoC 模式下,對象不需要自己創建或者查找它們所依賴的對象,這些工作由外部的容器(Spring)完成。

IoC 實現方式有很多種,例如依賴注入(DI)或依賴查找等,但 DI 是實現 IoC 的一種常見實現方法,它通過將依賴項注入到對象中來實現控制反轉。

IoC 底層原理

Spring 中的 IoC 底層是通過工廠模式+反射實現的,具體來說,它的實現步驟是這樣的:

  1. 首先,我們通過以下代碼初始化 IoC 容器:
ApplicationContext context = 
    new ClassPathXmlApplicationContext("applicationContext.xml");
  1. 之後會創建一個工廠類,工廠類中有一個創建 Bean 的方法 createBean。
  2. createBean 中首先會通過讀取配置文件,獲取到全類名,如下所示:
<beans>
    <bean id="myBean" class="com.example.MyBean" />
</beans>
  1. 之後通過反射,將獲取到的全類名進行加載,創建對象存放到 IoC 容器中。
  2. 當有代碼使用了 DI 時,從容器中找到(根據類名或類型查找)此實例進行使用,如下代碼所示:
@Component
public class MyBean {
    @Autowired
    private MyBean myBean;
    public void doSomething() {
        System.out.println("Bean: " + myBean);
    }
}

課後思考

IoC 中的工廠模式對應了 Spring 源碼中的哪個步驟?反射的核心實現代碼有哪些?它是如何實現的?

本文已收錄到我的面試小站 www.javacn.site,其中包含的內容有:Redis、JVM、併發、併發、MySQL、Spring、Spring MVC、Spring Boot、Spring Cloud、MyBatis、設計模式、消息隊列等模塊。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章