千家信息网

BeanFactory和ApplicationContext的区别是什么

发表于:2025-02-06 作者:千家信息网编辑
千家信息网最后更新 2025年02月06日,这篇文章主要讲解了"BeanFactory和ApplicationContext的区别是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"BeanFa
千家信息网最后更新 2025年02月06日BeanFactory和ApplicationContext的区别是什么

这篇文章主要讲解了"BeanFactory和ApplicationContext的区别是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"BeanFactory和ApplicationContext的区别是什么"吧!


什么是 Spring Bean

这是一个非常简单而又很复杂的问题,通常来说,Spring beans 就是被 Spring 容器所管理的 Java 对象,来看一个简单的例子

package com.zoltanraffai;  public class HelloWorld {    private String message;     public void setMessage(String message){       this.message  = message;    }     public void getMessage(){       System.out.println("My Message : " + message);    } }

在基于 XML 的配置中, beans.xml 为 Spring 容器管理 bean 提供元数据

什么是 Spring 容器

Spring 容器负责实例化,配置和装配 Spring beans,下面来看如何为 IoC 容器配置我们的 HelloWorld POJO

            

现在,它已经被 Spring 容器管理了,接下来的问题是:我们怎样获取它?

BeanFactory 和 ApplicationContext 的不同点

BeanFactory 接口

这是一个用来访问 Spring 容器的 root 接口,要访问 Spring 容器,我们将使用 Spring 依赖注入功能,使用 BeanFactory 接口和它的子接口 特性:

  • Bean 的实例化/串联 通常情况,BeanFactory 的实现是使用懒加载的方式,这意味着 beans 只有在我们通过 getBean() 方法直接调用它们时才进行实例化 实现 BeanFactory 最常用的 API 是 XMLBeanFactory 这里是如何通过 BeanFactory 获取一个 bean 的例子:

package com.zoltanraffai;  import org.springframework.core.io.ClassPathResource;  import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.xml.XmlBeanFactory; public class HelloWorldApp{    public static void main(String[] args) {       XmlBeanFactory factory = new XmlBeanFactory (new ClassPathResource("beans.xml"));       HelloWorld obj = (HelloWorld) factory.getBean("helloWorld");          obj.getMessage();       }}

ApplicationContext 接口

ApplicationContext 是 Spring 应用程序中的中央接口,用于向应用程序提供配置信息 它继承了 BeanFactory 接口,所以 ApplicationContext 包含 BeanFactory 的所有功能以及更多功能!它的主要功能是支持大型的业务应用的创建 特性:

  • Bean instantiation/wiring

  • Bean 的实例化/串联

  • 自动的 BeanPostProcessor 注册

  • 自动的 BeanFactoryPostProcessor 注册

  • 方便的 MessageSource 访问(i18n)

  • ApplicationEvent 的发布 与 BeanFactory 懒加载的方式不同,它是预加载,所以,每一个 bean 都在 ApplicationContext 启动之后实例化 这里是 ApplicationContext 的使用例子:

package com.zoltanraffai;  import org.springframework.core.io.ClassPathResource;  import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.xml.XmlBeanFactory; 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 的所有特性,通常推荐使用前者。但是也有一些限制情形,比如移动应用内存消耗比较严苛,在那些情景中,使用更轻量级的 BeanFactory 是更合理的。然而,在大多数企业级的应用中,ApplicationContext 是你的首选。

感谢各位的阅读,以上就是"BeanFactory和ApplicationContext的区别是什么"的内容了,经过本文的学习后,相信大家对BeanFactory和ApplicationContext的区别是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

0