说说 BeanFactory和ApplicantContext?

说说 BeanFactory和ApplicantContext?
可以这么形容,BeanFactory 是 Spring 的“心脏”,ApplicantContext 是完整的“身躯”。
- BeanFactory(Bean 工厂)是 Spring 框架的基础设施,面向 Spring 本身。
- ApplicantContext(应用上下文)建立在 BeanFactoty 基础上,面向使用 Spring 框架的开发者。
改写:
BeanFactory 接口
BeanFactory 是一个通用的工厂接口,用于创建和管理各种类的对象。
Spring提供了多种实现方式,其中最常用的是XmlBeanFactory。然而,在Spring 3.2中,XmlBeanFactory已被废弃,建议使用XmlBeanDefinitionReader和DefaultListableBeanFactory。
BeanFactory接口位于类结构树的顶端,其中最重要的方法是getBean(String var1),它从容器中返回指定名称的Bean。
通过其他接口,BeanFactory的功能得到了不断扩展。例如,AbstractAutowireCapableBeanFactory定义了按照某种规则(例如按名称匹配、按类型匹配等)自动装配容器中的Bean的方法。
下面是使用过时的XMLBeanFactory获取Bean的示例代码:
public class HelloWorldApp {
public static void main(String[] args) {
BeanFactory factory = new XmlBeanFactory(new ClassPathResource("beans.xml"));
HelloWorld obj = (HelloWorld) factory.getBean("helloWorld");
obj.getMessage();
}
}
ApplicationContext 接口
ApplicationContext是从BeanFactory派生而来的,提供了更多面向实际应用的功能。可以将BeanFactory看作是手动挡,而将ApplicationContext看作是自动挡。
ApplicationContext继承了HierarchicalBeanFactory和ListableBeanFactory接口,并通过其他接口扩展了BeanFactory的功能,包括:
- Bean的实例化和装配
- 自动注册BeanPostProcessor
- 自动注册BeanFactoryPostProcessor
- 方便访问MessageSource(国际化)
- 发布ApplicationEvent和预加载所有bean(与BeanFactory的延迟加载方式不同)
下面是使用ApplicationContext的示例代码:
public class HelloWorldApp {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
HelloWorld obj = (HelloWorld) context.getBean("helloWorld");
obj.getMessage();
}
}
ApplicationContext包含了BeanFactory的所有特性,通常推荐使用ApplicationContext。