srping在获取bean文件的时候有2种获取方法,一个为 BeanFactory,一个为ApplicationContext,
BeanFactory接口的实现类为XmlBeanFactory,他的写法是
Resource res = new ClassPathResource("beans.xml"); BeanFactory bf =new XmlBeanFactory(res);
而ApplicationContext的实现类有3个:
1.ClassPathXmlApplicationContext:
ApplicationContext factory=new ClassPathXmlApplicationContext("classpath:applicationContext.xml"); ApplicationContext factory=new ClassPathXmlApplicationContext("applicationContext.xml"); ApplicationContext factory=new ClassPathXmlApplicationContext("file:E:/Workspaces/MyEclipse 8.5/Hello/src/applicationContext.xml");
2.FileSystemXmlApplicationContext用文件系统的路径总有两种相对与绝对路径
ApplicationContext factory=new FileSystemXmlApplicationContext("src/applicationContext.xml"); ApplicationContext factory=new FileSystemXmlApplicationContext("E:/Workspaces/MyEclipse 8.5/Hello/src/applicationContext.xml");
3.XmlWebApplicationContext 是专为Web工程定制的
ServletContext servletContext = request.getSession().getServletContext(); ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext );
上面2种接口的相同点和不同点是:
相同点:都是载入了bean,装配bean
不同点是:
beans包提供了以编程的方式管理和操控bean的基本功能,而context包增加了ApplicationContext,它以一种更加面向框架的方式增强了BeanFactory的功能。多数用户可以以一种完全的声明式方式来使用ApplicationContext,甚至不用去手工创建它,但是却去依赖像ContextLoader的支持类,在J2EE的Web应用的启动进程中用它启动ApplicationContext。当然,这种情况下还可以以编程的方式创建一个ApplicationContext。
Context包的基础是位于org.springframework.context包中的ApplicationContext接口。它是由BeanFactory接口集成而来,提供BeanFactory所有的功能。为了以一种更像面向框架的方式工作,context包使用分层和有继承关系的上下文类,包括:
1.MessageSource,提供对i18n消息的访问;
2.资源访问,比如URL和文件;
3.事件传递给实现了ApplicationListener接口的bean;
4.载入多个(有继承关系)上下文类,使得每一个上下文类都专注于一个特定的层次,比如应用的Web层
最关键的不同点是:
应用上下文与Bean工厂的另一个重要的区别就是关于单实例Bean是如何载入的。Bean工厂延迟载入所有的Bean,直到getbean()方法被调用是Bean才被创建。应用上下文则会在上下文启动后预载入所有的单实例Bean。通过预载入单实例bean ,确保当你需要的时候,你就不用等待,因为它们已经创建好了。