我是Spring框架的新手,我一直在摆弄它,并把一些样本应用放在一起,目的是评估Spring MVC在即将到来的公司项目中的使用。到目前为止,我真的很喜欢Spring MVC,它看起来很容易使用,并鼓励你编写对单元测试非常友好的类。
作为练习,我正在为我的一个示例/测试项目编写一个主方法。我不清楚的一件事是BeanFactory和ApplicationContext之间的确切区别——哪个适合在哪些条件下使用?
我知道ApplicationContext扩展了BeanFactory,但是如果我只是编写一个简单的主方法,我是否需要ApplicationContext提供的额外功能呢?ApplicationContext究竟提供了什么样的额外功能?
除了回答“我应该在main()方法中使用哪个”之外,关于在这样的场景中应该使用哪个实现,是否有任何标准或指南?我的main()方法是否应该被编写成依赖于bean/应用程序配置的XML格式——这是一个安全的假设吗,还是我将用户锁定到某个特定的东西?
这个答案在web环境中会改变吗——如果我的任何类需要了解Spring,它们更可能需要ApplicationContext吗?
谢谢你的帮助。我知道很多问题都可以在参考手册中找到答案,但如果没有仔细阅读手册,我很难找到这两个接口的清晰分解以及各自的优缺点。
Spring提供两种IOC容器,一种是XMLBeanFactory,另一种是ApplicationContext。
|
BeanFactory |
ApplicationContext |
Annotation support |
No |
Yes |
BeanPostProcessor Registration |
Manual |
Automatic |
Implementation |
XMLBeanFactory |
ClassPath/FileSystem/WebXmlApplicationContext |
Internationalization |
No |
Yes |
Enterprise services |
No |
Yes |
ApplicationEvent publication |
No |
Yes |
通过完整路径加载的FileSystemXmlApplicationContext bean。
通过CLASSPATH加载的bean
XMLWebApplicationContext和AnnotationConfigWebApplicationContext bean通过web应用程序上下文加载。
从基于Annotation的配置中加载Spring bean。
例子:
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(BeansConfiguration.class);
ApplicationContext是由web.xml中定义的ContextLoaderListener或ContextLoaderServlet和struts-config.xml中定义的ContextLoaderPlugin初始化的容器。
注意:XmlBeanFactory从Spring 3.1开始已弃用,取而代之的是DefaultListableBeanFactory和XmlBeanDefinitionReader。
Spring提供两种IOC容器,一种是XMLBeanFactory,另一种是ApplicationContext。
|
BeanFactory |
ApplicationContext |
Annotation support |
No |
Yes |
BeanPostProcessor Registration |
Manual |
Automatic |
Implementation |
XMLBeanFactory |
ClassPath/FileSystem/WebXmlApplicationContext |
Internationalization |
No |
Yes |
Enterprise services |
No |
Yes |
ApplicationEvent publication |
No |
Yes |
通过完整路径加载的FileSystemXmlApplicationContext bean。
通过CLASSPATH加载的bean
XMLWebApplicationContext和AnnotationConfigWebApplicationContext bean通过web应用程序上下文加载。
从基于Annotation的配置中加载Spring bean。
例子:
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(BeansConfiguration.class);
ApplicationContext是由web.xml中定义的ContextLoaderListener或ContextLoaderServlet和struts-config.xml中定义的ContextLoaderPlugin初始化的容器。
注意:XmlBeanFactory从Spring 3.1开始已弃用,取而代之的是DefaultListableBeanFactory和XmlBeanDefinitionReader。
基本上我们可以用两种方式创建spring容器对象
使用BeanFactory。
使用ApplicationContext。
都是界面,
使用实现类,我们可以为spring容器创建对象
来看看区别
BeanFactory:
不支持基于注释的依赖注入。
不支持I18N。
默认情况下,它支持惰性加载。
它不允许配置到多个配置文件。
例如:BeanFactory context=new XmlBeanFactory(new Resource(“applicationContext.xml”));
ApplicationContext
支持基于注释的依赖注入。@ autowired, @PreDestroy
I18N支持
它默认支持侵略性加载。
它允许配置多个配置文件。
前任:
ApplicationContext context=new ClasspathXmlApplicationContext(“applicationContext.xml”);