在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等这些容器。