关于Spring-ApplicationContext解读(一)

开课吧开课吧锤锤2021-02-22 15:58

    如果让你说一个大公司,你的脑海里最先想到的是哪家公司呢?阿里、百度、还是美团。你想到的这些公司有一个特点,那就是都是大型互联网公司,这些公司的支柱就是程序员们的技术,那如何能在这样的互联网公司能够有一席立足之地呢?那就需要你高超的技术,那如何提升技术,不妨看看以下内容,来提升自己。

Java

    BeanFactory和ApplicationContext

    Spring通过一个配置文件描述Bean和Bean之间的依赖关系,利用Java反射功能实例化Bean,并建立Bean之间的依赖关系。

    Spring的IOC容器在完成这些底层工作的基础上,还提供了Bean实例缓存、生命周期管理、Bean实例代理、时间发布、资源装载等高级服务。

    BeanFactory是Spring框架最核心的接口,它提供了高级IOC的配置机制。

    ApplicationContext建立在BeanFactory的基础上,提供了更多面向应用的功能,它提供了国际化支持和框架事件体系。

    我们一般称BeanFactory为IoC容器,而称ApplicationContext为应用上下文,但有时候为了行文方便,我们也将ApplicationContext称为Spring容器。

    对于BeanFactory和ApplicationContext的用途:

    BeanFactory是Spring框架的基础设施,面向Spring本身

    ApplicationContext面向使用Spring框架的开发者,几乎所有的应用场合都可以直接使用Application而非底层的BeanFactory.

    ApplicationContext

    ApplicationContext概述

    Application由BeanFactory派生而来,提供了更多面向实际的功能。

    在BeanFactory中,很多功能都需要以编程的形式实现,但是在Application中则可以通过配置的方式实现。

    ApplicationContext类体系结构

    Application继承了HierachicalBeanFactory和ListableBeanFactory接口,在此基础上,还通过其他接口扩展了BeanFactory的功能。

    这些接口如下:

    ApplicationEventPublisher:让容器拥有发布应用上下文事件的功能,包括容器的启动事件、关闭事件等。

    MessageSource:为应用提供i18N国际化消息访问的功能

    ResourcePatternResolver:加载资源,可以通过带前缀的Ant风格的资源文件路径装载Spring的配置文件

    LifeCycle:该接口提供start()和stop()方法,主要用于控制异步处理的过程,以达到管理和控制JMX、任务调度等目的

Java

Java

    ConfigurableApplicationContext扩展于ApplicationContext,主要新增了两个方法refresh()和close(),让Application具有启动、刷新、关闭应用上下文的能力。

    在应用上下文关闭的情况下,refresh可以启动上下文,在启动的情况下可以清楚缓存并重新装载配置信息。close方法这可以关闭上下文。

    以上内容了解即可。

    ApplicationContext初始化

Java

Java

    在获取ApplicationContext实例后,我们就可以像BeanFactory那样调用getBean(beanName)返回Bean了。

    ApplicationContext的初始化和BeanFactory初始化有一个重大区别:

    BeanFactory在初始化容器时,并没有实例化Bean,直到第一次访问某个Bean时才实例化目标Bean。

    ApplicationContext会在初始化应用上下文时就实例化所有单实例的Bean。

    因此,ApplicationContext的初始化时间会比BeanFactory的时间稍微长一些,不过稍后的调用则没有“第一次惩罚”的问题。

    以上内容由开课吧老师小小工匠提供,更多Java教程尽在开课吧广场Java教程频道。更多免费课程可以关注公众号码农集散地”

上一篇:关于Spring-ApplicationContext解读(二)下一篇:Java教程:分析数据库与缓存的双写问题(三)

最新文章

文章图0

如何在大规模 Kubernetes 集群上实现高 SLO?

Pod创建成功率:这是一个非常重要的指标,蚂蚁集团一周的Pod创建量在百万级别,如果成功率波动会造成大量Pod失败,同时Pod成功率下跌也是集群异常的最直观反映;

2021-03-05 16:20:04

文章图1

MySQL不建议delete删除数据的原因是什么?(二)

MySQL内部不会真正删除空间,而且做标记删除,即将delflag:N修改为delflag:Y,commit之后会会被purge进入删除链表,如果下一次insert更大的记录,delete之后的空间不会被重用,如果插入的记录小于等于delete的记录空会被重用,这块内容可以通过知数堂的innbloc

2021-03-05 11:45:44

文章图2

MySQL不建议delete删除数据的原因是什么?(一)

物理上主要由系统用户数据文件,日志文件组成,数据文件主要存储MySQL字典数据和用户数据,日志文件记录的是datapage的变更记录,用于MySQLCrash时的恢复。

2021-03-05 11:36:22

文章图3

Java教程:MySQL如何设计索引更高效?(五)

同时也介绍了如何更好做MySQL索引设计,包括前缀索引,复合索引的顺序问题以及MySQL8.0推出的索引跳跃扫描,我们都知道,索引可以加快数据的检索,减少IO开销,会占用磁盘空间,是一种用空间换时间的优化手段,同时更新操作会导致索引频繁的合并分裂,影响索引性能,在实际的业务开发中,如何根据业务场景去

2021-03-05 11:29:12

文章图4

Java教程:MySQL如何设计索引更高效?(四)

在单列索引不能很好的过滤数据的时候,可以结合where条件中其他字段来创建复合索引,更好的去过滤数据,减少IO的扫描次数,举个例子:业务需要按照时间段来查询交易记录,有如下的SQL:

2021-03-05 11:25:02