工作了这么久,每次去面试都会被问“请谈谈你对Srping IOC的理解吧”,说实话每次都是按照网上面试题里说的,而且说完之后,面试官就把话题转到别的方向上了,说明对我的回答不是很满意,其实自己也知道一些基本的概念,但具体是如何实现的并且里面的细节并不是很熟悉,所以决定好好研究一下Spring的源码,来一探究竟。
一、下载源码
既然要研究源码就要先搞到源码,这一步还是很简单的,毕竟去GitHub随便一搜就能搞到,但这里我要说的是源码的编译,真是让人蛋疼,我下载的源码是Spring 5.2.1版本,发现是用Gradle搞的,而且里面还有个Kotlin啥玩意的,对于长期处于一线搬砖的我完全不知道这俩是干嘛的,好在也不算难搞。
我用的是Idea,编译完成之后试试看能不能查看类图,如果可以的话说明编译成功了。但接下来遇到的问题整整困扰了我两天。那就是自己照着人家的样子,创建了一个module,想用来写自己的测试代码,结果各种报错,最主要的错误就是那个狗*一样的Kotlin,一直提示我不兼容,我更新到最新的1.3.50版本还是不行....
直接说结果吧,在一个月黑风高的夜晚,已经钻被窝的我突然想到是不是我的Idea版本太老了(也不敢升级,毕竟激活也不是走的正常途径),想到这我就立马起床、穿衣、开机,最终还真是这个原因,升级完Idea之后之前的报错就消失了,而我的Idea也从2100年到期变成三个月后到期。
二、测试代码
既然开始研究Spirng,第一步肯定就是先搞明白IOC容器,所以我先写了一个十分简单的例子。
1、目录结构:
User类就是用于测试扔到IOC容器管理的测试类
BeanConfiguration类是一个配置类,相当于老版本xml的作用
Application类是程序入口,里面有一个main函数
2、测试代码:
public class User {
public User(){
System.out.println("Hello User");
}
}
@Configuration
public class BeanConfiguration {
@Bean
public User user(){
return new User();
}
}
public class Application {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(BeanConfiguration.class);
User user = context.getBean(User.class);
System.out.println(user);
}
}
如果以上代码执行没问题,那么准备工作算是完事了,接下来就是一步一步Debug,开始研究IOC容器的具体实现过程,希望自己能坚持下去。