在Spring中,那些組成你應用程序的主體及由Spring Ioc容器所管理的對象,都被稱之爲bean。簡單來說,bean就是Spring容器的初始化、配置及管理的對象。除此以外,bean就與應用程序中的其餘對象沒有什麼區別了。而bean定義以及bean相互間的依賴關係將經過配置元數據來描述。java
BeanFactory是Spring Ioc容器的實際表明者,Ioc容器負責容納此前所描述的bean,並對bean進行管理。spring
在Spring中,BeanFacyory是Ioc容器的核心接口。它的職責包括:實例化、定位、配置應用程序中的對象及創建這些對象間的依賴。緩存
Spring中有兩種容器:maven
① BeanFactory 一個最簡單的Spring容器,給依賴注入(DI)提供了基礎的支持。函數
② ApplicationContext 此容器添加以一些企業須要用到的東西,更加全面。它包含了BeanFactory容器中的東西。測試
Spring爲咱們提供了許多易用的BeanFactory實現,其中DefaultListableBeanFactory是整個bean加載的核心部分,是Spring註冊及加載bean的默認實現。this
DefaultListableBeanFactory的相關類圖:spa
類圖中各個類的做用:code
直接使用DefaultListableBeanFactory例子:xml
新建一個maven工程,引用spring相關包。
定義一個xml配置bean文件,beanXMLTest.xml
<?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="testBean" class="com.test.TestBean"/> </beans>
定義一個bean,TestBean.java的實現
package com.test; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.support.BeanDefinitionReader; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.beans.factory.xml.XmlBeanDefinitionReader; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; public class TestBean { public String showMsg; public String getShowMsg() { return showMsg; } public void setShowMsg(String showMsg) { this.showMsg = showMsg; } public static void main(String[] args) { Resource resource = new ClassPathResource("beanXMLTest.xml"); BeanFactory fa = new DefaultListableBeanFactory(); BeanDefinitionReader bdr = new XmlBeanDefinitionReader((BeanDefinitionRegistry) fa); bdr.loadBeanDefinitions(resource); TestBean bean = (TestBean)fa.getBean("testBean"); bean.setShowMsg("測試消息"); System.out.println(bean.getShowMsg()); } }
運行main方法,獲得打印結果
說明正確的獲取到了bean。
還能夠使用其它ClassPathXmlApplicationContext、AnnotationConfigApplicationContext、 AnnotationConfigWebApplicationContext、FileSystemApplicationContext等這些容器。