2018.5 月的時候 寫過一篇文章 - Spring IOC 實現(xiàn)原理荠割,到現(xiàn)在有8000多的閱讀了吧妹卿。 看來還是有很多人在研究IOC的實現(xiàn)原理。當(dāng)時寫的比較粗糙蔑鹦。所以準(zhǔn)備這次來一個詳細(xì)點的纽帖。計劃寫一個深度解析的系列 。想法很好举反,能不能完成說實話我也不是很確定。因為工作比較忙扒吁,盡量吧火鼻。
之前的文章,鏈接在這 雕崩,點我 魁索,為了控制每篇文章的篇幅,在之前文章已經(jīng)描述過的概念盼铁,就不再贅述粗蔚,因為此系列是基于上一篇文章的擴(kuò)展,建議讀一下之前的那篇文章饶火,直接進(jìn)入正題鹏控。
此系列計劃會有6篇文章:
資源定位
標(biāo)簽的解析,包含自定義標(biāo)簽的解析
Bean的載入和解析
Bean注入容器
依賴的注入
容器的其它特性功能
現(xiàn)在springboot很流行肤寝,新創(chuàng)建的項目基本上都是使用的springboot 当辐,開發(fā)者幾乎不用再搞一堆很長的配置文件,springboot已經(jīng)封裝好了鲤看。當(dāng)然帶來的好處就是缘揪,開箱即用,也有弊端,屏蔽了底層的實現(xiàn)找筝,對原理理解起來也更難了蹈垢。為了使邏輯更加的清晰,或者更容器找到解析的入口袖裕,此系列依然采用Springmvc的文件配置方式曹抬。
環(huán)境準(zhǔn)備
- xml配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd" default-autowire="byName">
<bean id="messageService" class="com.yuluo.source.service.MessageServiceImpl"/>
</beans>
- 程序入口:
public static void main(String[] args) {
//SpringApplication.run(SpringDemo2Application.class, args);
// 用我們的配置文件來啟動一個 ApplicationContext
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:application.xml");
System.out.println("context 啟動成功");
// 從 context 中取出我們的 Bean,而不是用 new MessageServiceImpl() 這種方式
MessageService messageService = context.getBean(MessageService.class);
// 這句將輸出: hello world
System.out.println(messageService.getMessage());
}
- 創(chuàng)建接口
public interface MessageService {
String getMessage();
}
- 接口實現(xiàn)類
public class MessageServiceImpl implements MessageService {
public String getMessage() {
return "hello world";
}
}
至此陆赋,一個基本的調(diào)試程序沐祷,就已經(jīng)搭好了,使用斷點就可以進(jìn)入源碼的流程調(diào)試了攒岛。