Spring源码学习09

本文详细介绍了Spring容器的启动流程,包括ClassPathXmlApplicationContext在内的多种上下文实现类的继承关系,以及StandardEnvironment相关类的继承关系。重点讲解了Spring如何初始化和管理Bean,配置上下文环境。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.ClassPathXmlApplicationContext继承UML类图

  • a.BeanFactory:没啥说的Spring容器访问bean的根接口,提供的方法如getBean()获取bean、containsBean()是否包含bean、isSingleton()bean单例吗?、isPrototype()bean是原型的吗?、isTypeMatch()bean是与那个类型匹配吗?
  • b.HierarchicalBeanFactory继承BeanFactory添加了getParentBeanFactory()获取父beanFactory的方法、containsLocalBean()包含本地的bean忽略掉祖先contexts包含的bean
  • c.ListableBeanFactory继承BeanFactory提供了一些可以获取BeanDefinitonNames和getBeanNames的方法,从命名上不难理解,集合性操作BeanFactory
  • d.ResourceLoader加载资源的策略接口(如classPath),getResource()返回指定位置的资源,getClassLoader暴露ResourceLoader使用的ClassLoader
  • e.ResourcePatternResolver继承ResourceLoader添加了getResources()根据localtionPattern获取资源数组的接口
  • f.ApplicationEventPublisher发布事件的接口
  • g.EnvironmentCapable定义组件能活到Environment对象
  • h.MessageSource用于解析消息的策略接口,支持此类消息的参数化和国际化
  • i.ApplicationContext为应用提供配置的中心接口,当应用在运行中是只读的,实现类可以重新加载他如果支持的话。比如applicationId
  • ApplicationName,DisPlayName,startUpDate,getParent ApplicationContext
  • j.LifeCycle:定义启动/停止生命周期控制方法的通用接口包含start()、stop()、isRunning方法
  • k.DefaultResourceLoader{@link ResourceLoader}接口的默认实现  由{@link ResourceEditor}使用,并作为基类 * {@link org.springframework.context.support.AbstractApplicationContext}。 也可以单独使用。
  • l.DispisbleBean:实现该接口的bean会在关闭容器时调用destroy()方法
  • m.ConfigurableApplicationContext SPI接口由大多数(如果不是全部)应用程序上下文实现除了{@link org.springframework.context.ApplicationContext}接口中的应用程序上下文客户端方法之外,还提供配置应用程序上下文的工具
  • 比如setId setEnvironment、setParent、addBeanFactoryPostProcessor、addApplicationListener、refresh、getBeanFactory其中以配置ApllicationContext方法居多
  • n.AbstractApplicationContext {@link org.springframework.context.ApplicationContext}接口的抽象实现。不要求用于配置的存储类型; 只需实现常见的上下文功能 使用Template Method设计模式,需要具体的子类来实现抽象方法.扩展方法如refreshBeanFactory刷新beanFactory
  • o.AbstractRefreshableApplicationContext {@link org.springframework.context.ApplicationContext}实现的基类,它应该支持对{@link #refresh()}的多次调用, 每次都创建一个新的内部bean工厂实例。通常(但不一定),例如 上下文将由一组配置位置驱动,以从中加载bean定义,提供扩展方法loadBeanDefinitions
  • p.AbstractRefreshableConfigApplicationContext{@link AbstractRefreshableApplicationContext}子类,用于添加指定配置位置的常见处理。 * 用作基于XML的应用程序上下文实现的基类,例如{@link ClassPathXmlApplicationContext} * 和{@link FileSystemXmlApplicationContext}提供了对configLocations,即配置地址的解析存储操作
  • r.AbstractXmlApplicationContext 方便的{@link org.springframework.context.ApplicationContext}实现基类 ,从包含{@link org.springframework.beans.factory.xml.XmlBeanDefinitionReader} * 理解的bean定义的XML文档中读取beanDefinitons
  • s.ClassPathXmlApplicationContext 独立的XML应用程序上下文,获取上下文定义文件 * 从类路径中,将普通路径解释为包含包路径的类路径资源名称(例如“mypackage / myresource.txt”)。

2.StandardEnvironment相关类继承关系UML

  • a.PropertyResolver:用于解析任何底层源的属性的接口。方法有.getProperty() 返回与给定键关联的属性值、resolvePlaceholders()解析给定文本中的$ {...}占位符,将其替换为{@link #getProperty}解析的相应属性值。 没有默认值的无法解决的占位符将被忽略并传递不变
  • b.ConfigurablePropertyResolver继承PropertyResolver配置接口,提供一些设置属性接口比如setConversionService、setPlaceholderPrefix、setPlaceholderSuffix、validateRequiredProperties
  • c.Environment继承自PropertyResolver 表示当前应用程序正在运行的环境的接口。 模拟应用程序环境的两个关键方面:  <em>profiles</em> and <em>properties</em>与属性访问相关的方法通过{@link PropertyResolver}超级接口公开,提供了获取profiles的方法比如getActiveProfiles返回显式为此环境激活的配置文件集、getDefaultProfiles如果未明确设置活动配置文件,则默认情况下返回要激活的配置文件集、acceptsProfiles
  • d.ConfigurableEnvironment继承自Environment和COnfigurablePropertyResolver,不怎么说明也知道肯定包含设置profiles的方法比如setActionProfiles方法,addActionProfile。并添加了扩展方法getPropertySources()返回environment需要的PropertySources对象,方便在解析environment搜索相应的PropertySource对象,getSystemProperties获取系统属性,getSystemEnvironment获取系统环境,merge将给定父环境的活动配置文件,默认配置文件和属性源附加到此(子)环境的每个环境的相应集合
  • e.AbstractEnvironment{@link Environment}实现的抽象基类。 支持保留的默认配置文件名称的概念, * 并允许通过{@link #ACTIVE_PROFILES_PROPERTY_NAME}和{@link #DEFAULT_PROFILES_PROPERTY_NAME} * 属性指定活动和默认配置文件
  • f.StandardEnvironment@link Environment}实现适用于'标准'(即非Web)应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值