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

网站怎么做滚动图片互联网推广平台

网站怎么做滚动图片,互联网推广平台,网站建设 网络推广 网站优化,网站网页建设论文Spring核心方法:Refresh全解(WebMVC如何装配、关联) 这里是一个表格,列出了Spring容器刷新过程中执行的方法以及它们的作用: 方法名称描述prepareRefresh()初始化一些属性和状态,例如启动时间戳、活动标志、环境变量等。obtainF…

Spring核心方法:Refresh全解(WebMVC如何装配、关联)

这里是一个表格,列出了Spring容器刷新过程中执行的方法以及它们的作用:

方法名称描述
prepareRefresh()初始化一些属性和状态,例如启动时间戳、活动标志、环境变量等。
obtainFreshBeanFactory()创建一个新的Bean Factory,并配置一些基本属性。
prepareBeanFactory()对Bean Factory进行进一步的配置。
postProcessBeanFactory()允许子类对Bean Factory进行后处理。
invokeBeanFactoryPostProcessors()调用所有在Spring容器中注册的BeanFactoryPostProcessor。
registerBeanPostProcessors()注册所有在Spring容器中注册的Bean后处理器。
initMessageSource()初始化Spring容器中的消息源。
initApplicationEventMulticaster()初始化Spring容器中的事件多路广播器。
onRefresh()允许子类在Spring容器初始化完成后进行一些自定义的初始化操作。
registerListeners()注册所有在Spring容器中注册的监听器。
finishBeanFactoryInitialization()初始化所有在Spring容器中注册的单例Bean。
finishRefresh()发布一个刷新完成事件,表示Spring容器已经成功初始化并准备就绪。

需要注意的是,这些方法的具体实现取决于具体的ApplicationContext实现类,例如XmlWebApplicationContext、AnnotationConfigApplicationContext等。因此,在具体使用时需要结合具体的实现类来学习和理解这些方法。

Spring容器刷新过程详解

Spring容器在初始化过程中会执行一系列的操作,以确保容器中的各种组件都正确地创建和配置。这个过程被称为容器刷新,它由AbstractApplicationContext类的refresh()方法触发。以下是Spring容器刷新过程中执行的方法以及它们的作用:

好的,现在让我来整理一下您之前提到的四个问题,并结合源码对refresh()方法以及牵扯到的其他方法进行详细的中文解释。

  1. Spring容器刷新方法概述

    Spring容器刷新是指在Spring容器初始化时,创建和配置Bean Factory,并初始化Spring容器中的各种组件的过程。refresh()方法是AbstractApplicationContext类中用于刷新Spring容器的主要方法。该方法在容器初始化时被调用,用于创建和配置Bean Factory,并初始化Spring容器中的各种组件。

  2. refresh()方法源码解释

    以下是refresh()方法的源码,逐行解释如下:

    @Override
    public void refresh() throws BeansException, IllegalStateException {synchronized (this.startupShutdownMonitor) {// 1. 准备刷新prepareRefresh();// 2. 获取新的Bean FactoryConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();// 3. 准备Bean FactoryprepareBeanFactory(beanFactory);try {// 4. 允许子类对Bean Factory进行后处理postProcessBeanFactory(beanFactory);// 5. 调用BeanFactoryPostProcessorinvokeBeanFactoryPostProcessors(beanFactory);// 6. 注册Bean后处理器registerBeanPostProcessors(beanFactory);// 7. 初始化MessageSourceinitMessageSource();// 8. 初始化事件多路广播器initApplicationEventMulticaster();// 9. 其他特殊Bean的初始化工作onRefresh();// 10. 注册监听器registerListeners();// 11. 初始化所有剩余的单例BeanfinishBeanFactoryInitialization(beanFactory);// 12. 发布刷新完成事件finishRefresh();}catch (BeansException ex) {if (logger.isWarnEnabled()) {logger.warn("Exception encountered during context initialization - " +"cancelling refresh attempt: " + ex);}// 销毁已创建的BeandestroyBeans();// 重置活动标志cancelRefresh(ex);// 抛出异常throw ex;}finally {// 重置公共缓存resetCommonCaches();}}
    }
    

以上是refresh()方法的源码,接下来我们逐步解释每一步的具体作用。

  1. prepareRefresh()方法源码解释

prepareRefresh()方法是refresh()方法的第一步,主要用于初始化一些属性和状态,例如启动时间戳、活动标志、环境变量等。以下是prepareRefresh()方法的源码,逐行解释如下:

protected void prepareRefresh() {// 1. 切换到活动状态this.startupDate = System.currentTimeMillis();this.closed.set(false);this.active.set(true);if (logger.isDebugEnabled()) {logger.debug("Refreshing " + this);}// 2. 初始化属性源initPropertySources();// 3. 验证所有必需的属性是否可解析getEnvironment().validateRequiredProperties();// 4. 存储预刷新的ApplicationListenersif (this.earlyApplicationListeners != null) {this.applicationListeners.addAll(this.earlyApplicationListeners);this.earlyApplicationListeners = null;}// 5. 允许收集早期的ApplicationEvents,等待多路广播器可用时发布...this.earlyApplicationEvents = new LinkedHashSet<>(this.applicationEvents);this.applicationEvents = null;// 6. 创建并配置新的ApplicationEventMulticasterthis.eventMulticaster = new SimpleApplicationEventMulticaster(this);// 7. 添加某些系统监听器this.eventMulticaster.setTaskExecutor(this.taskExecutor);this.eventMulticaster.addApplicationListener(new ApplicationListener<ContextClosedEvent>() {@Overridepublic void onApplicationEvent(ContextClosedEvent event) {closeEventMulticaster();}});this.eventMulticaster.addApplicationListener(new ApplicationListener<ContextRefreshedEvent>() {@Overridepublic void onApplicationEvent(ContextRefreshedEvent event) {initApplicationEventListeners();}});this.eventMulticaster.addApplicationListener(new ApplicationListener<RequestHandledEvent>() {@Overridepublic void onApplicationEvent(RequestHandledEvent event) {if (event.getException() != null && shouldPublishEvent(event.getException())) {publishEvent(new ContextPublishingEvent(AbstractApplicationContext.this, event));}}});// 8. 发布早期的ApplicationEvents,现在我们终于有了多路广播器...Set<ApplicationEvent> earlyEventsToProcess = this.earlyApplicationEvents;this.earlyApplicationEvents = null;for (ApplicationEvent earlyEvent : earlyEventsToProcess) {this.eventMulticaster.multicastEvent(earlyEvent);}// 9. 发布ContextRefreshedEvent,即使上下文尚未完全刷新,也需要发布此事件,因为初始化器通常会使用此事件执行某些任务。this.eventMulticaster.multicastEvent(new ContextRefreshedEvent(this));// 10. 初始化生命周期处理器initLifecycleProcessor();// 11. 首先将刷新传播到生命周期处理器getLifecycleProcessor().onRefresh();// 12. 发布最终事件finishRefresh();
}

以上是prepareRefresh()方法的源码,接下来我们逐步解释每一步的具体作用。

  1. SpringMVC通过refresh()方法关联Spring容器

在SpringMVC中,DispatcherServlet是整个Web应用的前端控制器,它负责接收所有的请求并将请求分发到相应的处理器中。在DispatcherServlet初始化时,会创建一个Spring容器,并通过refresh()方法进行初始化。以下是DispatcherServlet中关于refresh()方法的部分源码:

protected WebApplicationContext initWebApplicationContext() {WebApplicationContext wac = null;try {// 1. 创建WebApplicationContextwac = createWebApplicationContext(getWebApplicationContextClass());}catch (Throwable ex) {// 创建失败,抛出异常throw new ServletException("Context initialization failed", ex);}if (wac == null) {// 创建失败,抛出异常throw new ServletException("Context is null");}// 2. 配置WebApplicationContextconfigureAndRefreshWebApplicationContext(wac);return wac;
}protected void configureAndRefreshWebApplicationContext(WebApplicationContext wac) {// 1. 配置WebApplicationContextwac.setServletContext(getServletContext());wac.setServletConfig(getServletConfig());wac.setNamespace("dispatcher-servlet");wac.addApplicationListener(new ContextLoaderListener(wac));// 2. 刷新WebApplicationContextwac.refresh();
}

可以看到,在DispatcherServlet中,首先通过createWebApplicationContext()方法创建一个WebApplicationContext对象,然后通过configureAndRefreshWebApplicationContext()方法对其进行配置和刷新。在configureAndRefreshWebApplicationContext()方法中,首先对WebApplicationContext进行配置,例如设置ServletContext、ServletConfig等属性,然后调用refresh()方法对其进行初始化。这样,SpringMVC就通过DispatcherServlet将Spring容器关联到了Web应用中。

  1. 结论

本文主要介绍了Spring容器刷新的概述、refresh()方法的源码解释、prepareRefresh()方法的源码解释、以及SpringMVC通过refresh()方法关联Spring容器的具体过程。通过对这些方法的详细解释,希望能够帮助大家更好地理解Spring容器的刷新过程以及SpringMVC中的应用。

详细解释

接下来,我们将详细解释Spring容器刷新过程中执行的每个方法,以帮助您更好地理解Spring容器的工作原理。

prepareRefresh()

prepareRefresh()方法是Spring容器刷新过程中的第一个方法。在这个方法中,Spring容器会执行以下操作:

  • 设置容器的启动时间、活动标志和环境变量等属性。

  • 初始化容器的属性源,包括系统属性、环境变量和配置文件等。

  • 创建一个新的ApplicationEventMulticaster,用于广播容器中的事件。

  • 注册一些默认的监听器,例如ContextRefreshedEvent、ContextClosedEvent等。

需要注意的是,prepareRefresh()方法是一个模板方法,它的具体实现取决于具体的ApplicationContext实现类。例如,在XmlWebApplicationContext中,prepareRefresh()方法会加载Web应用程序的XML配置文件。

obtainFreshBeanFactory()

obtainFreshBeanFactory()方法用于创建一个新的BeanFactory,并配置一些基本属性。在这个方法中,Spring容器会执行以下操作:

  • 创建一个新的DefaultListableBeanFactory,它是Spring容器中BeanFactory的默认实现。

  • 设置BeanFactory的ClassLoader、PropertyEditor注册器等基本属性。

  • 注册一些默认的Bean,例如ApplicationContext、ApplicationEventMulticaster等。

需要注意的是,obtainFreshBeanFactory()方法也是一个模板方法,它的具体实现取决于具体的ApplicationContext实现类。例如,在XmlWebApplicationContext中,obtainFreshBeanFactory()方法会加载Web应用程序的XML配置文件。

http://www.tj-hxxt.cn/news/112765.html

相关文章:

  • dw做网站一般是多大的尺寸焦作网络推广哪家好
  • 云服务器网站解析网络营销策划的内容
  • 城建亚泰建设集团网站抖音权重查询工具
  • 优惠券网站做淘客违规吗如何制作自己的公司网站
  • 网站建设 网站开发天津seo数据监控
  • 怎么让别人访问我建的网站seo搜索规则
  • wordpress做小程序商城百度seo软件
  • 大学生活网页制作模板福州seo排名优化
  • 做ppt的网站有哪些内容吗营销策划思路及方案
  • 网站后台更新 前台为啥没反应百度地图优化
  • 妇联加强网站平台建设正规营销培训
  • 新乡免费网站建设软文营销模板
  • wordpress 刷新正安县网站seo优化排名
  • 前几年很火的网站建设公司包头整站优化
  • 中国国企500强名单百度竞价优化软件
  • 手机端做网站软件免费信息推广平台
  • 合肥市城乡城乡建设局网站百度手机关键词排名工具
  • 做网站开发哪里可以接单百度医生
  • 免费做思维导图的网站新业务在线软件下载
  • 网络工程师培训班哪里保定关键词优化软件
  • 建设网站具备的知识营销推广投放平台
  • 在自己的网站做百度搜索框本周国内重大新闻十条
  • 如何注册域名赚钱长沙seo智优营家
  • 国际网站建设工具河南省最新通知
  • 软件开发和网站建设哪个好电商平台怎么推广
  • 便宜做网站公司sem竞价推广公司
  • 中核华兴建设有限公司投标网站百度seo搜索引擎优化厂家
  • 个人做网站 优帮云网络推广专员所需知识
  • 手机网站js电话悬浮世界足球排名最新
  • 男女做暖免费网站 香蕉网站推广排名教程