我是Spring框架的新手,我一直在摆弄它,并把一些样本应用放在一起,目的是评估Spring MVC在即将到来的公司项目中的使用。到目前为止,我真的很喜欢Spring MVC,它看起来很容易使用,并鼓励你编写对单元测试非常友好的类。
作为练习,我正在为我的一个示例/测试项目编写一个主方法。我不清楚的一件事是BeanFactory和ApplicationContext之间的确切区别——哪个适合在哪些条件下使用?
我知道ApplicationContext扩展了BeanFactory,但是如果我只是编写一个简单的主方法,我是否需要ApplicationContext提供的额外功能呢?ApplicationContext究竟提供了什么样的额外功能?
除了回答“我应该在main()方法中使用哪个”之外,关于在这样的场景中应该使用哪个实现,是否有任何标准或指南?我的main()方法是否应该被编写成依赖于bean/应用程序配置的XML格式——这是一个安全的假设吗,还是我将用户锁定到某个特定的东西?
这个答案在web环境中会改变吗——如果我的任何类需要了解Spring,它们更可能需要ApplicationContext吗?
谢谢你的帮助。我知道很多问题都可以在参考手册中找到答案,但如果没有仔细阅读手册,我很难找到这两个接口的清晰分解以及各自的优缺点。
a. bean工厂和应用程序上下文之间的一个区别是前者只在调用getBean()方法时实例化bean,而ApplicationContext在容器启动时实例化单例bean,它不等待getBean被调用。
b。
ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
or
ApplicationContext context = new ClassPathXmlApplicationContext{"spring_dao.xml","spring_service.xml};
您可以根据项目需求使用一个或多个xml文件。我在这里使用了两个xml文件,即一个用于服务类的配置细节,另一个用于dao类。这里ClassPathXmlApplicationContext是ApplicationContext的子。
c. BeanFactory Container是基本容器,它只能创建对象和注入依赖项。但我们不能附加其他服务,如安全、事务、消息等,以提供我们必须使用ApplicationContext容器的所有服务。
d. BeanFactory不提供国际化支持,即i18n,但ApplicationContext提供了国际化支持。
e. BeanFactory容器不支持自动扫描(支持基于注释的依赖注入)特性,但ApplicationContext容器支持。
f.直到请求时间,Beanfactory容器才会创建bean对象。这意味着Beanfactory容器会懒惰地装载bean。而ApplicationContext容器只在加载时创建单例bean的对象。这意味着有早期装载。
Beanfactory容器只支持bean的两个作用域(单例和原型)。但是ApplicationContext容器支持所有的bean范围。