• ApplicationContext接口解读


    ApplicationContext接口解读

    ApplicationContext介绍

    在使用Spring的时候,我们经常需要先得到一个ApplicationContext对象,然后从该上下文中获取我们配置的Bean对象。

    我们知道ApplicationContext是一个接口,实现了改接口的实现类都可以看作一个IOC容器,我们可以从ApplicationContext中拿到注册的Beans。

    ApplicationContext隶属于org.springframework.context,是SpringFramework中Bean的管理者,为SpringFramework的诸多功能提供支撑作用。

    BeanFactory和ApplicationContext关系

    BeanFactory是IOC容器的最基础的核心接口,而ApplicationContext接口继承了EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory,MessageSource, ApplicationEventPublisher, ResourcePatternResolver。

    可以看出ApplicationContext是BeanFactory的子类,ApplicationContext是具备了BeanFactory的所有功能,是包含IOC容器的完整实现,我们一般都叫ApplicationContext上下文,上下文是IOC容器的完整实现而且还在其实现的基础上添加了许多功能,如ApplicationEventPublisher接口就提供的上下文事件发布的功能。

    public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory,
          MessageSource, ApplicationEventPublisher, ResourcePatternResolver
    
    • 1
    • 2
    • EnvironmentCapable:获取 Environment。
    • ListableBeanFactory、HierarchicalBeanFactory:这是 BeanFactory 体系三大接口中的两个,分别提供 Bean 迭代和访问父容器的功能。
    • MessageSource:支持国际化功能。
    • ApplicationEventPublisher:应用事件发布器,封装事件发布功能的接口。
    • ResourcePatternResolver:该接口继承至 ResourceLoader ,作用是加载多个 Resource。

    ApplicationContext源码

    ApplicationContext集合了几个核心接口外,还格外添加了几个获取上下文信息的方法,如:getId(),getApplicationName(),getParent()

    public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory,
    		MessageSource, ApplicationEventPublisher, ResourcePatternResolver {
    
    	/**
    	 * Return the unique id of this application context.
    	 * @return the unique id of the context, or {@code null} if none
    	 */
    	@Nullable
    	String getId();
    
    	/**
    	 * Return a name for the deployed application that this context belongs to.
    	 * @return a name for the deployed application, or the empty String by default
    	 */
    	String getApplicationName();
    
    	/**
    	 * Return a friendly name for this context.
    	 * @return a display name for this context (never {@code null})
    	 */
    	String getDisplayName();
    
    	/**
    	 * Return the timestamp when this context was first loaded.
    	 * @return the timestamp (ms) when this context was first loaded
    	 */
    	long getStartupDate();
    
    	/**
    	 * Return the parent context, or {@code null} if there is no parent
    	 * and this is the root of the context hierarchy.
    	 * @return the parent context, or {@code null} if there is no parent
    	 */
    	@Nullable
    	ApplicationContext getParent();
    
    
    	AutowireCapableBeanFactory getAutowireCapableBeanFactory() throws IllegalStateException;
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
  • 相关阅读:
    互联网摸鱼日报(2022-11-05)
    Linux——(第五章)用户管理
    MySQL查询为啥慢了?
    线程池的实现原理与使用详解
    【每日渗透笔记】参数值对应的接口,注入点测试尝试
    pytest(11)-Allure生成测试报告
    MySQL的下载与安装(详细)
    Matlab时间序列趋势分析与预测技术
    tomcat启动报错Cannot find usrlocaltomcatbinsetclasspath.sh原因
    【Flutter】Android原生WebView(非Flutter WebView)与FlutterWeb交互
  • 原文地址:https://blog.csdn.net/qq_43203949/article/details/125454744