简而言之,BeanFactory提供了配置框架和基本的功能, 而 ApplicationContext为它增加了更强的功能,这些功能中的一些或许更加接近J2EE并且围绕企业级应用。一般来说,ApplicationContext是BeanFactory的完全超集, 任何BeanFactory功能和行为的描述也同样被认为适用于ApplicationContext
用户有时不能确定BeanFactory和ApplicationContext中哪一个在特定场合下更适合。 通常大部分在J2EE环境的应用中,最好选择使用ApplicationContext, 因为它不仅提供了BeanFactory所有的特性以及它自己附加的特性,而且还提供以声明的方式使用一些功能, 这通常是令人满意的。BeanFactory主要是在非常关注内存使用的情况下 (比如在一个每kb都要计算的applet中)使用,而且你也不需要用到ApplicationContext的所有特性。
这一章粗略地分为两部分,第一部分包括对BeanFactory和ApplicationContext都适用的一些基本原则。第二部分包括仅仅适用于ApplicationContext的一些特性。
生成BeanFactory的方法
XmlBeanFactory factory = new XmlBeanFactory(is);
// 或者
ClassPathResource res = new ClassPathResource( " beans.xml " );
XmlBeanFactory factory = new XmlBeanFactory(res);
生成ApplicationContext方法
new String[] ... {"applicationContext.xml", "applicationContext-part2.xml"} );
ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext( "" );
applicationContxt是可以转换成beanFactory的
Beans被定义为两种部署模式中的一种:singleton或non-singleton。 (后一种也别叫作prototype,尽管这个名词用的不精确因为它并不是非常适合)。 如果一个bean是singleton形态的,那么就只有一个共享的实例存在, 所有和这个bean定义的id符合的bean请求都会返回这个唯一的、特定的实例。
如果bean以non-singleton,prototype模式部署的话,对这个bean的每次请求都会创建一个新的bean实例。这对于例如每个user需要一个独立的user对象这样的情况是非常理想的。
class = " examples.ExampleBean " singleton = " false " />
< bean name = " yetAnotherExample "
class = " examples.ExampleBeanTwo " singleton = " true " />