所有spring在初始化完成BeanDefinition以后(默认使用的是GenericBeanDefinition)后。在使用spring容器里的bean实例时,我们一般都是通过getBean方法实现的。例如
private ClassPathXmlApplicationContext context;
@Before
public void setUp() throws Exception {
context = new ClassPathXmlApplicationContext("classpath*:gg/spring/context.xml");
}
@Test
public void testLoadBean() {
//获取spring的bean实例
context.getBean("test1");
}
其中ClassPathXmlApplicationContext的方法getBean,是调用了AbstractApplicationContext里的getBean方法。而AbstractApplicationContext的getbean方法调用了beanFactory窗器是的getBean方法,此时的beanFactory是使用具体实现类是DefaultListableBeanFactory类,getBean方法是调用的父类AbstractBeanFactory的getBean实现
public Object getBean(String name) throws BeansException {
return getBeanFactory().getBean(name);
}
AbstractBeanFactory的getBean方法代码如下,其中调用了doGetBean方