当前位置: 首页 > news >正文

龙华网站建设专业公司昆明移动互联网开发

龙华网站建设专业公司,昆明移动互联网开发,网页设计作业保护动物,荣耀手机正品官网查询ApplicationContext 在 Spring 中代表着一个高级的 IoC 容器#xff0c;负责实例化、配置和组装对象。ApplicationContext 接口扩展自 BeanFactory 接口#xff0c;添加了更多的企业级功能#xff0c;比如更容易的国际化、事件传播、资源加载等。 ApplicationContext 接口关…ApplicationContext 在 Spring 中代表着一个高级的 IoC 容器负责实例化、配置和组装对象。ApplicationContext 接口扩展自 BeanFactory 接口添加了更多的企业级功能比如更容易的国际化、事件传播、资源加载等。 ApplicationContext 接口关系 ApplicationContext 是一个功能丰富的接口它继承自 ListableBeanFactory 和 HierarchicalBeanFactory 等多个接口并且添加了其他特性。它的层级关系如下所示 public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory, MessageSource, ApplicationEventPublisher, ResourcePatternResolver {// 各种方法 }EnvironmentCapable提供对环境属性的访问。ListableBeanFactory允许列举所有 bean 实例而不是按名字逐个查找。HierarchicalBeanFactory允许一个 bean 工厂成为另一个 bean 工厂的子工厂。MessageSource国际化功能。ApplicationEventPublisher事件发布功能。ResourcePatternResolver资源加载功能。 实现类 ClassPathXmlApplicationContext 一个非常常见的 ApplicationContext 实现是 ClassPathXmlApplicationContext它从类路径下的 XML 文件加载配置元数据并初始化应用上下文。我们分析一下它的关键源代码。 public class ClassPathXmlApplicationContext extends AbstractXmlApplicationContext {private String[] configLocations;public ClassPathXmlApplicationContext(String configLocation) throws BeansException {this(new String[] {configLocation}, true, null);}public ClassPathXmlApplicationContext(String[] configLocations, boolean refresh, Nullable ApplicationContext parent)throws BeansException {super(parent);setConfigLocations(configLocations);if (refresh) {refresh(); // 初始化 ApplicationContext}}Overrideprotected String[] getConfigLocations() {return this.configLocations;}// 其他方法... }ClassPathXmlApplicationContext 继承自 AbstractXmlApplicationContext在构造方法中可以指定配置文件的位置还可以决定是否立即进行初始化通过调用 refresh() 方法。 refresh 方法解析 refresh() 方法在 AbstractApplicationContext 中定义是 Spring 容器启动的核心方法。以下是简化版本的源代码 public abstract class AbstractApplicationContext extends DefaultResourceLoader implements ConfigurableApplicationContext {Overridepublic void refresh() throws BeansException, IllegalStateException {synchronized (this.startupShutdownMonitor) {// Prepare this context for refreshing.prepareRefresh();// Tell the subclass to refresh the internal bean factory.ConfigurableListableBeanFactory beanFactory obtainFreshBeanFactory();// Prepare the bean factory for use in this context.prepareBeanFactory(beanFactory);try {// Allows post-processing of the bean factory in context subclasses.postProcessBeanFactory(beanFactory);// Invoke factory processors registered as beans in the context.invokeBeanFactoryPostProcessors(beanFactory);// Register bean processors that intercept bean creation.registerBeanPostProcessors(beanFactory);// Initialize message source for this context.initMessageSource();// Initialize event multicaster for this context.initApplicationEventMulticaster();// Initialize other special beans in specific context subclasses.onRefresh();// Check for listener beans and register them.registerListeners();// Instantiate all remaining (non-lazy-init) singletons.finishBeanFactoryInitialization(beanFactory);// Last step: publish corresponding event.finishRefresh();}// 其他异常处理代码...}}// 其他方法... }refresh() 方法调用了一系列准备和初始化的步骤 prepareRefresh()准备上下文设置开始时间、活动标志等。obtainFreshBeanFactory()刷新内部的 BeanFactory并获取它。prepareBeanFactory(beanFactory)设置类加载器、后置处理器等。postProcessBeanFactory(beanFactory)提供子类覆写的扩展点用于添加额外的处理。invokeBeanFactoryPostProcessors(beanFactory)调用所有注册的 BeanFactoryPostProcessor。registerBeanPostProcessors(beanFactory)注册 BeanPostProcessor。initMessageSource()初始化消息资源处理用于国际化。initApplicationEventMulticaster()初始化事件广播器。onRefresh()由子类覆写用于特定上下文的 bean 初始化。registerListeners()注册监听器。finishBeanFactoryInitialization(beanFactory)初始化剩余的单例 beans。finishRefresh()最后一步广播相关事件比如上下文刷新事件。 总结 ApplicationContext 通过 refresh() 方法的调用来初始化 Spring 容器。这个方法是整个应用上下文生命周期中非常重要的一部分它会创建和初始化所有的 beans同时处理依赖注入。 正是通过这个复杂而强大的初始化过程Spring 能够管理应用中的 beans并提供如 AOP、事务管理、事件发布等特性。虽然 ApplicationContext 提供了非常丰富的功能但是作为开发者我们通常只需要与它的几个核心方法打交道如 getBean()、register()、refresh() 等而 Spring 框架会处理其背后的复杂逻辑。
http://www.zqtcl.cn/news/818616/

相关文章:

  • 笑话 语录用什么网站做搜一搜百度
  • 合肥网站建设新闻营销影视类网站建设
  • 焦作有网站建设公司c 转网站开发
  • 化妆品网站建设报告邯郸在哪个省
  • 自建网站怎么做后台管理系统世界网站流量排名
  • 我做外贸要开国际网站吗官方网站下载微博
  • 佛山专业建设网站网页模板是什么
  • 网站描述标签怎么写wordpress首页图标
  • 做系统去哪个网站好好玩又不用实名认证的游戏
  • 仿帝国网站源码wordpress主题idown
  • 大型网站开发php框架seo全站优化全案例
  • wordpress收录优化做抖音seo用哪些软件
  • DW怎么做招聘网站重庆有什么好玩的
  • 网站建设的网络公司百度官方app下载
  • 医疗电子科技网站建设站群 网站如何做
  • 汇邦团建网站谁做的钢结构招聘网
  • 如何制作一个动态的网站的登录详细步骤页面网站炫酷首页
  • 网站建设找星火龙网站开发 在线支付
  • 如何在公司网站下设置邮箱自己开发一个app要多少钱
  • 珠海市横琴新区建设环保局网站做catia数据的网站
  • 珠海pc网站建设wordpress子主题安全
  • 布吉企业网站建设网站维护与建设内容
  • 专业图书商城网站建设七初SEO网站建设
  • 南通公司网站模板建站wordpress设置主页
  • 小企业网站建设哪找广州app开发平台
  • 建设部国家标准网站免费网站建设 免备案
  • 网站后台批量上传图片ue5培训机构哪家强
  • 合肥制作网站在哪里建网站
  • 网站开发话术合同管理软件系统
  • 洛阳建设网站公司vue 微信公众号开发