BeanFactory和ApplicationContext的区别

这篇具有很好参考价值的文章主要介绍了BeanFactory和ApplicationContext的区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、概述

BeanFactory与ApplicationContext的关系

  1. BeanFactory是Spring的早期接口,称为Spring的Bean工厂,ApplicationContext是后期更高级接口,称之为Spring容器
  2. ApplicationContext在BeanFactory基础上对功能进行了扩展,例如:监听功能、国际化功能等。BeanFactory的API更偏向底层ApplicationContext的API大多数是对这些底层API的封装
  3. Bean创建的主要逻辑和功能都被封装在BeanFactory中,ApplicationContext不仅继承了BeanFactory,而且ApplicationContext内部还维护着BeanFactory的引用,所以,ApplicationContext与BeanFactory既有继承关系,又有融合关系。
  4. Bean的初始化时机不同,原始BeanFactory是在首次调用getBean时才进行Bean的创建,而ApplicationContext则是配置文件加载,容器一创建就将Bean都实例化并初始化好。

ApplicationContext除了继承了BeanFactory外,还继承了ApplicationEventPublisher(事件发布器)、
ResouresPatternResolver(资源解析器)、MessageSource(消息资源)等。但是ApplicationContext的核心功能还是BeanFactory。

BeanFactory和ApplicationContext的区别
BeanFactory与ApplicationContext的关系

BeanFactory和ApplicationContext的区别

applicationContext内部维护着beanFactory的引用,在学习过程中会查看beanFactory内部维护的属性,断点查看如下图示内容的:

BeanFactory是核心接口,项目运行过程中肯定有具体实现参与,这个具体实现就是DefaultListableBeanFactory,而ApplicationContext内部维护的Beanfactory的实现类也是它。轮层级来说,真正可以作为一个可以独立使用的ioc容器还是DefaultListableBeanFactory,因此可以这么说,DefaultListableBeanFactory 是整个spring ioc的始祖。

BeanFactory和ApplicationContext的区别

只导入spring-context坐标时,BeanFactory关系图如下:

BeanFactory和ApplicationContext的区别

只在Spring基础环境下,常用的三个ApplicationContext作用如下:

BeanFactory和ApplicationContext的区别

二、通过代码来验证加载

验证BeanFactory和ApplicationContext对Bean的初始化时机,ApplicationContextBeanFactory区别我们可以通过classPathXmlApplicationContextXmlBeanFactory来进行比较,classPathXmlApplicationContext 属于ApplicationContext,而 XmlBeanFactory属于BeanFactory系列的,XmlBeanFactory继承自DefaultListableBeanFactory,重写了一些功能,使自己更强大。

(1)添加依赖

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.3.23</version>
</dependency>

(2)添加TestController 和 TestService

public class TestController {

	public TestController() {
        System.out.println("TestController初始化了");
    }

    public void method1(){
        System.out.println("method1");
    }

    public void method2(){
        System.out.println("method2");
    }
}
public class TestService {

	public TestService() {
        System.out.println("TestService初始化了");
    }
 
    public void method1() {
        // 业务省略...
    }

    public void method2() {
        // 业务省略...
    }
}

(3)添加bean.xml

<!-- 上面这一大堆是命名空间,也就是他提供了bean标签,spring需要根据这个来进行解析bean标签,如果没有他的话启动会报错 -->
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- bean 标签:用于配置让 spring 创建对象,并且存入 ioc 容器之中
        id 属性:对象的唯一标识。spring内部将这些名称和具体的bean对象进行绑定,然后spring容器可以通过这个的名称找对我们需要的对象,这个名称叫做bean的名称
        class 属性:指定要创建对象的全限定类名
    -->
    <bean id="testService" class="com.gzl.cn.service.TestService"/>
    <bean id="testController" class="com.gzl.cn.controller.TestController"/>
</beans>
public class Client {
    public static void main(String[] args) {
        XmlBeanFactory xmlBeanFactory = new XmlBeanFactory(new ClassPathResource("bean.xml"));
    }
}

运行结果:并没有访问无参构造器初始化,当通过XmlBeanFactory 第一次访问getBean方法的时候才会触发初始化!

BeanFactory和ApplicationContext的区别

接下来再来看classPathXmlApplicationContext:

public class Client {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("classpath:bean.xml");
    }
}

运行结果:不管使用没使用都会触发初始化!

BeanFactory和ApplicationContext的区别

三、引入web依赖

如果Spring基础环境中加入了其他组件解决方案,如web层解决方案,即导入spring-web坐标,此时
ApplicationContext的继承体系:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>5.3.23</version>
</dependency>

BeanFactory和ApplicationContext的区别

在Spring的web环境下,常用的两个ApplicationContext作用如下:

BeanFactory和ApplicationContext的区别

web环境下的这两个ApplicationContext,在Spring集成web时使用。文章来源地址https://www.toymoban.com/news/detail-464304.html

到了这里,关于BeanFactory和ApplicationContext的区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • BeanFactory与ApplicationContext基本介绍

    接口 定义能力, 抽象类 实现接口的一些重要方法,最后 实现类 可以实现自己的一些逻辑 仅仅是一个接口,Spring 的核心容器,并不是IOC容器的具体实现,它的一些具体实现类才是 BeanFactory 是 ApplicationContext 的父接口 BeanFactory才是 Spring 的核心容器, 主要的 ApplicationContext 实现

    2024年02月13日
    浏览(37)
  • 第一讲:BeanFactory和ApplicationContext接口

    BeanFactory是ApplicationContext的父接口,是真正的Spring核心容器,主要的ApplicationContext实现都【组合】了他的功能。 首先先看一下BeanFactory的接口定义: 表面上只有getBean功能,实际上控制反转、基本的依赖注入、直至Bean的生命周期的各种功能,都由他的实现类提供, 例如:Defau

    2024年02月12日
    浏览(35)
  • 进阶Spring(2)-BeanFactory和ApplicationContext实现

    🏠个人主页:阿杰的博客 💪个人简介:大家好,我是阿杰,一个正在努力让自己变得更好的男人👨 目前状况🎉:24届毕业生,奋斗在找实习的路上🌟 🚗🚗为了让更多的人看到更优质的博客,阿杰正在努力的更新学习中心中的内容。 首先看代码 spring底层创建实体类就是

    2024年02月05日
    浏览(39)
  • 解锁ApplicationContext vs BeanFactory: 谁更具选择性?

    目录 一、聚焦源码回顾 (一)源码分析和理解 (二)简短的回顾对比建议 二、ApplicationContext vs BeanFactory特性对比 (一)主要特性总结 (二)直接建议 三、案例简单说明 (一)加载少量的 Bean的案例 (二)简单的命令行工具:用于读取配置文件并生成报告 (三)启动时加

    2024年04月25日
    浏览(33)
  • Mr. Cappuccino的第60杯咖啡——Spring之BeanFactory和ApplicationContext

    概述 BeanFactory,以Factory结尾,表示它是一个工厂类(接口), 它是负责生产和管理bean的一个工厂。在Spring中,BeanFactory是IOC容器的核心接口,它的职责包括:实例化、定位、配置应用程序中的对象及建立这些对象间的依赖; BeanFactory只是个接口,并不是IOC容器的具体实现,但是

    2024年02月13日
    浏览(41)
  • 理解SpringIOC和DI第一课(Spring的特点),IOC对应五大注解,ApplicationContext vs BeanFactory

    对象这个词在Spring范围内,称为bean Spring两大核心思想 1.IOC     (IOC是控制反转,意思是 控制权反转-控制权(正常是谁用这个对象,谁去创建,)-控制对象的控制权,反转的意思是创建对象的控制权,交给了Spring) 优点:解耦合 高内聚:一个模块内部的关系 低耦合:各个模

    2024年02月04日
    浏览(45)
  • C、C++、C#的区别概述

    https://link.zhihu.com/?target=https%3A//csharp-station.com/understanding-the-differences-between-c-c-and-c/文章翻译源于此链接 01、C语言 ​ Dennis Ritchie在1972年创造了 C语言 并在1978年公布。Ritchie设计C的初衷是用于开发新版本的 Unix 。在那之前,Unix使用的是 汇编语言 (assembly language),它是计算机

    2024年02月04日
    浏览(37)
  • JVM——栈和堆概述,以及有什么区别?

    方法栈并不是某一个 JVM 的内存空间,而是我们描述方法被调用过程的一个逻辑概念。 在同一个线程内,T1()调用T2(): T1()先开始,T2()后开始; T2()先结束,T1()后结束。 从英文单词角度来说 栈:stack 堆:heap 从数据结构角度来说 栈和堆一样:都是先进后出,后进先出的数据结

    2024年02月12日
    浏览(40)
  • Spring源码-浅识BeanFactory

    在SpringBoot出现之前,我们使用Spring需要以配置文件的方式进行启动.如果使用XML文件配置.则通过 XmlWebApplicationContext.java 进行启动.常应用在Web项目的开发中. 以此为例,通过阅读源码发现和 XmlWebApplicationContext.java \\\"平级\\\"的类如下所示 由此我们可以知道 ApplicationContext 遵循 Applicat

    2024年02月03日
    浏览(44)
  • 05.BeanFactory后处理器

    BeanFactory后处理器 BeanFactory后处理器的作用:为 BeanFactory 提供扩展;@ComponentScan, @Bean, @Mapper 等注解的解析属于核心容器(即 BeanFactory)的扩展功能,这些扩展功能由不同的BeanFactory后处理器来完成, 其实 主要就是补充了一些 bean 定义 常见的 BeanFactory 后处理器 实现自己的BeanFac

    2024年02月08日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包