首先,所謂Ioc容器,是指一個能夠容納和管理Bean的容器,而BeanFactory是Spring Ioc容器實現類必須遵守的一個最基礎的接口。
《Spring源碼深度解析》裏有一個最簡單的例子:
首先寫一個最簡單的Bean:
package com.ls.spring.bean;
public class MyBean {
private String name = "Lon Bean";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
然後寫一個xml配置文件beanFactory.xml,用來聲明這個bean:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="myBean" class="com.ls.spring.bean.MyBean"/>
</beans>
最後再Test類裏測試BeanFactory:
package com.ls.spring.bean.factory;
import com.ls.spring.bean.MyBean;
import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import static org.junit.Assert.*;
@SuppressWarnings("deprecation")
public class BeanFactoryTest {
@Test
public void testSimpleLoad() {
Resource resource = new ClassPathResource("beanFactory.xml");
BeanFactory bf = new XmlBeanFactory(resource);
MyBean bean = (MyBean) bf.getBean("myBean");
assertEquals("Lon Bean", bean.getName());
}
}
執行之前可以看出XmlBeanFactory就是BeanFactory的具體實現類之一(它繼承自DefaultListableBeanFactory,一個非常核心的類),而且從類名不難看出,它是一個與xml有關的BeanFactory,也就是說它是一個可以讀取以xml文件方式定義的BeanDefinition(這個以後再看,現在我可以理解爲一個包含bean集合的一種數據結構)的容器。
執行Test,我們會發現assertEquals斷言成功了,證明MyBean已成功實例化,並且BeanFactory對象成功管理了MyBean實例,通過getBean方法來獲取MyBean實例。
其實上面Test執行的步驟可簡單地概括爲:
1.讀取配置文件BeanFactory.xml。
2.在BeanFactory.xml中找到對應的Bean類,並實例化,然後把實例交給BeanFactory對象管理。
3.通過getBean方法從BeanFactory對象中獲取實例化後的實例。