三种启动方式
ClassPathXmlApplicationContext
这个是我们最常用的实现类了,我们经常会用这个类来构建一个Spring容器
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:application.xml");
FileSystemXmlApplicationContext
可以用系统文件来构建一个Spring容器,需要填写一个绝对路径的文件
ApplicationContext context = new FileSystemXmlApplicationContext("c:/application.xml");
AnnotationConfigApplicationContext
是基于Java配置类和注解来使用的,不需要配置文件
@Configuration
public class BeanJava {
@Bean
public Hello hello(){
return new Hello();
}
}
ApplicationContext context = new AnnotationConfigApplicationContext(BeanJava.class);
几个重要的类
先来两张很重要的类图(网上盗的,但是是真的好,侵删):
- 第一张图可以看到,我们最熟悉的ApplicationContext接口,最后的实现类都实现了这个接口;
- 第二张图看到,ApplicationContext继承了BeanFactory,所以我们说Spring就是一个BeanFactory是不违和的;
BeanFactory
这是我们看源码最顶级的父类了,里面定义了一些最基本的方法,像getBean什么的:
ListableBeanFactory
我们看BeanFactory可以看到,它只提供了一些获取单个bean的方法,没有任何能获取批量bean的方法,看这个接口的名字就知道,这个接口提供了一系列获取批量操作的方法:
HierarchicalBeanFactory
Hierarchical,意思是层级,看名字就知道是定义父子容器的接口,方法也比较简单,只有两个:
AutowireCapableBeanFactory
自动装配的接口:
一个方法
AbstractApplicationContext#refresh()
这个方法就是梦开始的地方了,容器的初始化就是在这个方法里完成的,慢慢看吧。