1.概述:
Bean工厂(com.springframework.beans.factory.BeanFactory)是spring框架最核心的接口,它提供了高级Ioc的配置机制;BeanFactory使管理不同类型的java对象成为 可能;
应用上下文(com.springframework.context.ApplicationContext)是建立在BeanFactory基础之上,提供了更多面向应用的功能;
我们一般称BeanFactory为IOC容器,而ApplicationContext为应用上下文;
2.BeanFactory:
一个工厂类,用来管理java bean;
spring为BeanFactory提供了多种实现,最常用的是XmlBeanFactory.下面使用xml来装配beans;
package mainTest; import java.io.IOException; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.core.io.Resource; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.core.io.support.ResourcePatternResolver; import beans.Car; public class ResourceLoaderTest { public static void main(String[] args) throws IOException { ResourcePatternResolver resolver =new PathMatchingResourcePatternResolver(); Resource res[]=resolver.getResources("classpath*:**/bean.xml"); //BeanFactory bean=new XmlBeanFactory(res); for(Resource s :res){ BeanFactory bean=new XmlBeanFactory(s); Car car=bean.getBean("car",Car.class); System.out.println(car.toString()); } // Car car=bean.getBean("car",Car.class); // System.out.println(car.toString()); } }
注意:在初始化BeanFactory时,必须为其提供一种日志框架,这样启动Spring时才不会报错;
4.ApplicationContext:
ApplicationContext的主要实现类是ClassPathXmlApplicationContext和FileSystemXmlApplicationContext;前者是默认加载配置文件,后者默认从文件系统中装载配置文件;
package mainTest; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext; import beans.Car; public class ApplicationContextTest { public static void main(String[] args) { //默认加载路径 //ApplicationContext context=new ClassPathXmlApplicationContext("classpath*:**/bean.xml"); //文件系统装配加载路径 ApplicationContext context=new FileSystemXmlApplicationContext(new String[]{"D:/workspace/springLearn/src/config1/bean.xml","D:/workspace/springLearn/src/config/bean.xml"}); Car car=(Car)context.getBean("car"); System.out.println(car.toString()); Car car2=(Car)context.getBean("car1"); System.out.println(car2.toString()); } }
5.WebApplicationContext:
专门为Web应用准备的,它允许从相对于Web根目录路径装载配置文件完成初始化工作;从WebApplicationContext中可以获取ServletContext的引用,整个Web应用上下文对象将作为属性放置到ServletContext中,以便Web环境可以访问Spring应用上下文;