欢迎来到本篇技术博客,今天我们将探讨Spring框架中两个重要的容器:BeanFactory 和 ApplicationContext。...BeanFactory 和 ApplicationContext 是Spring IoC容器的两个重要实现,它们都用于管理和装配应用程序中的组件。...区分BeanFactory和ApplicationContext现在让我们来总结一下BeanFactory 和 ApplicationContext 之间的主要区别:延迟加载 vs....而 ApplicationContext 在容器启动时就会实例化所有的Bean。功能扩展: ApplicationContext 提供了更多的企业级功能,如国际化、事件传播、资源加载等。...如果您需要更多的企业级功能或希望在启动时立即初始化Bean,可以使用ApplicationContext。
beanFactory.registerResolvableDependency(ApplicationEventPublisher.class, this); beanFactory.registerResolvableDependency(ApplicationContext.class
; } } 下面是第二个文件 MainApp.java 的内容: package com.tutorialspoint; import org.springframework.context.ApplicationContext...org.springframework.context.support.ClassPathXmlApplicationContext; public class MainApp { public static void main(String[] args) { ApplicationContext...2 Spring ApplicationContext 容器 该容器添加了更多的企业特定的功能,例如从一个属性文件中解析文本信息的能力,发布应用程序事件给感兴趣的事件监听器的能力。...该容器是由org.springframework.context.ApplicationContext 接口定义。...ApplicationContext 容器包括 BeanFactory 容器的所有功能,所以通常建议超过 BeanFactory。
(一)Applicaiont 继承关系解读 ApplicationContext 分别继承了以下接口: ResourcePatternResolver:解析和加载资源 MessageSource:国际化...BeanFactory:Bean 容器 EnvironmentCapable:获取应用环境配置 ApplicationEventPublisher:发布事件 (二)构建ApplicationContext
ApplicationContext是对BeanFactory的扩展,实现BeanFactory的所有功能,并添加了事件传播,国际化,资源文件处理等。...protected void initPropertySources() { super.initPropertySources(); //TODO } } 一般不直接实现ApplicationContext...beanFactory.registerResolvableDependency(ApplicationEventPublisher.class, this); beanFactory.registerResolvableDependency(ApplicationContext.class...org.springframework.context.support.ResourceBundleMessageSource"> lang/message 读取: ApplicationContext
applicationContext.xml <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context
(AbstractApplicationContext.java:347) at org.springframework.context.support.AbstractApplicationContext.doClose...(AbstractApplicationContext.java:991) at org.springframework.context.support.AbstractApplicationContext.close...(AbstractApplicationContext.java:1008) at org.springframework.context.support.AbstractApplicationContext...当破坏feignContext时,它将关闭与每个FeignClient关联的ApplicationContext。...FeignContext将销毁与每个FeignClient关联的ApplicationContext。
1 ApplicationContext都是什么(它继承了哪些接口)? 图片2 ApplicationContext有哪些实现子类? 1. 有哪些实现子类? 2. 实现子类可以分为哪几类? 3....图片3 ApplicationContext中持有什么样的BeanFactory实现? 1. ApplicationContext中持有什么样的BeanFactory实现?...图片4 ApplicationContext的实现子类中加载bean定义的代码结构是怎样的? xml方式的类结构是怎样的? application.xml <?...XMLConfigMain.javapublic class XMLConfigMain { public static void main(String[] args) { ApplicationContext
官方描述 先来看一下官方文档中关于BeanFactory和ApplicationContext的描述。...准确来说,是org.springframework.context.support.AbstractApplicationContext#getBeanFactory。...是ApplicationContext的抽象实现。...image.png 在AbstractApplicationContext中,所有BeanFactory接口的实现,都是委托给了BeanFactory对象。...// AbstractApplicationContext#getBean(java.lang.Class, java.lang.Object...) public T getBean(Class
1.直接通过@Resource注解注入 @Resource ApplicationContext applicationContext; 2.实现ApplicationContextAware接口 @...applicationContext; @Override public void setApplicationContext(ApplicationContext applicationContext...) throws BeansException { SpringBeanUtils.applicationContext = applicationContext; }...public ApplicationContext getApplicationContext(){ return applicationContext; } } 3.在启动类...) { SpringBeanUtils.applicationContext = applicationContext; } }
文章目录 BeanFactory和ApplicationContext ApplicationContext ApplicationContext概述 ApplicationContext类体系结构...ApplicationContext初始化 ApplicationContext两个主要实现类 ClassPathXmlApplicationContext FileSystemXmlApplicationContext...我们一般称BeanFactory为IoC容器,而称ApplicationContext为应用上下文,但有时候为了行文方便,我们也将ApplicationContext称为Spring容器。...对于BeanFactory 和 ApplicationContext的用途: BeanFactory是Spring框架的基础设施,面向Spring本身 ApplicationContext面向使用Spring...---- ApplicationContext初始化 ? ?
MessageSource MessageSource 定义了获取 message 的策略方法 getMessage(),在 ApplicationContext 体系中,该方法 AbstractApplicationContext...该方法在 AbstractApplicationContext 中实现。...= null) { if (this.parent instanceof AbstractApplicationContext) { ((AbstractApplicationContext...在 AbstractApplicationContext 中存在一个 LifecycleProcessor 类型的实例对象 lifecycleProcessor,AbstractApplicationContext...在 ApplicationContext 体系中由AbstractApplicationContext 实现,用于关闭 ApplicationContext 销毁所有 bean ,此外如果注册有 JVM
右键 new -》XML Configuration File-》spring config
ac = new ClassPathXmlApplicationContext("applicationContext.xml"); User bean = ac.getBean("user...parent) { super(parent); } 在往上是AbstractApplicationContext构造方法,在此构造方法中就没有再显示的super(parent)了。...public AbstractApplicationContext(ApplicationContext parent) { this(); setParent(parent); } this()...public AbstractApplicationContext() { this.resourcePatternResolver = getResourcePatternResolver(); }...return new PathMatchingResourcePatternResolver(this); } 创建PathMatchingResourcePatternResolver对象的时候,AbstractApplicationContext
由于篇幅限制,我们并没有详细解释ApplicationContext类所继承的父接口及其作用。因此,本文将单独为ApplicationContext进行详细说明,包括其继承的父接口及其作用。...ApplicationContext父接口MessageSource大家应该都比较熟悉MessageSource,它用于国际化,许多项目都会使用它。...(AppConfig.class);//String message = applicationContext.getMessage("test", null, new Locale("en"));//...applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);applicationContext.getEnvironment...ApplicationEventPublisherApplicationEventPublisher是一个事件发布器,我们可以通过ApplicationContext来发布一个相应的事件,具体步骤如下:
ListableBeanFactory:主要用于获取bean相关信息,例如获取所有bean名称,查找指定类型的所有bean等,如下图: ApplicationContext接口 关于ApplicationContext...ApplicationContext继承下来了,另外通过类图可以发现,ApplicationContext还继承了诸如Environment、Resource、Message、Event 等相关的接口...(应用事件)等服务相关的接口,简单的说ApplicationContext是以bean管理为基础的综合能力扩展,用于满足业务对Spring综合能力的需要; 再看看ApplicationContext源码...等都继承自AbstractApplicationContext; 先看看是如何实现BeanFactory接口中定义的方法的: @Override public Object getBean...就具备了bean管理配置的能力; 扩展思考 看了AbstractApplicationContext类中beanFactory相关的代码,我就猜想:莫非Message支线也是这个套路,委托给Message
1.直接通过@Resource注解注入@ResourceApplicationContext applicationContext;2.实现ApplicationContextAware接口@Componentpublic...class SpringBeanUtils implements ApplicationContextAware { private static ApplicationContext applicationContext...; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException...{ SpringBeanUtils.applicationContext = applicationContext; } public ApplicationContext...) { SpringBeanUtils.applicationContext = applicationContext; }}
这个容器在 org.springframework.context.ApplicationContext interface 接口中定义。...ApplicationContext 包含 BeanFactory 所有的功能,一般情况下,相对于 BeanFactory,ApplicationContext 会被推荐使用。...最常被使用的 ApplicationContext 接口实现: FileSystemXmlApplicationContext:该容器从 XML 文件中加载已被定义的 bean。...message); } } 下面是文件 MainApp.java 的内容: package com.tutorialspoint; import org.springframework.context.ApplicationContext...org.springframework.context.support.FileSystemXmlApplicationContext; public class MainApp { public static void main(String[] args) { ApplicationContext
BeanFactory和ApplicationContext的继承关系图 ApplicationContext继承了ResourcePatternResolver,当然就间接实现了ResourceLoader...所以,任何的ApplicationContext实现都可以看作是一个ResourceLoader甚至ResourcePatternResolver。...而这就是ApplicationContext支持Spring内统一资源加载策略的真相。...通常,所有的ApplicationContext实现类会直接或者间接地继承org.springframework.context.support.AbstractApplicationContext,从这个类上...AbstractApplicationContext和ResourceLoader、ResourcePatternResolver的关系
applicationContext = new ClassPathXmlApplicationContext("ApplicationContext.xml"); User user...) 3、AbstractApplicationContext 核心方法: org.springframework.context.support.AbstractApplicationContext#refresh...AbstractApplicationContext 是Spring IOC 容器中核心类,对父类,接口提供了具体实现,其中的方法非常丰富,在这里我们主要介绍其中的核心方法 refresh()。...因为 ApplicationContext 建立起来以后,其实我们是可以通过调用 refresh() 这个方法重建的,这样会将原来的 ApplicationContext 销毁,然后再重新执行一次初始化操作...通过上图,我们可以直观的了解到ApplicationContext 与BeanFactory 之间的关系。
领取专属 10元无门槛券
手把手带您无忧上云