BeanFactory和ApplicationContext

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的支持类,在J2EEWeb应用的启动进程中用它启动ApplicationContext。当然,这种情况下还可以以编程的方式创建一个ApplicationContext

Context包的基础是位于org.springframework.context包中的ApplicationContext接口。它是由BeanFactory接口集成而来,提供BeanFactory所有的功能。为了以一种更像面向框架的方式工作,context包使用分层和有继承关系的上下文类,包括:

1MessageSource,提供对i18n消息的访问;

2.资源访问,比如URL和文件;

3.事件传递给实现了ApplicationListener接口的bean

4.载入多个(有继承关系)上下文类,使得每一个上下文类都专注于一个特定的层次,比如应用的Web

 

最关键的不同点是:

应用上下文与Bean工厂的另一个重要的区别就是关于单实例Bean是如何载入的。Bean工厂延迟载入所有的Bean,直到getbean()方法被调用是Bean才被创建。应用上下文则会在上下文启动后预载入所有的单实例Bean。通过预载入单实例bean ,确保当你需要的时候,你就不用等待,因为它们已经创建好了。

你可能感兴趣的:(编程,bean,xml,Web,MyEclipse)