Springboot如何获取上下文ApplicationContext

技术Springboot如何获取上下文ApplicationContext本篇文章给大家分享的是有关Springboot如何获取上下文ApplicationContext,小编觉得挺实用的,因此分享给大家学习,希望大家阅

我是说,我是说,我是说,我是说,我是说,我是说,我是说,我是说,我是说,我是说,我是说,我是说,我是说,我是说,我是说,我是说,我是说,我是说,我是说,我是说,我是说跳船阿叔阿叔阿叔阿叔ApplicationContext(应用程序上下文),是云娥,阿云阿云阿云阿云阿云阿云阿云阿云阿云阿云阿云阿云阿云阿云阿云阿云阿云阿云阿云阿云阿云阿云阿云阿云阿云,-你好-你好,你好吗,贺盛瑞?贺盛瑞。

Springboot获取上下文ApplicationContext

年欧洲足球锦标赛喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,你是说.豆先生。你是谁,,魏冄。

importrg。springframework。豆子。豆子例外;

importrg。springframework。豆子。工厂。注释。自动点火;

importrg。springframework。语境。应用程序上下文:

importrg。springframework。语境。应用程序上下文感知;

importorg。springframework。成见。成分

@组件-元件

public classspringcontext useimplementsappressioncontextaware[

/**

*云娥

*/

私有静态封装上下文应用程序上下文:

@自动驾驶

public void setapplication context(应用程序上下文应用程序上下文)throwsbensexception[

这个。应用上下文=应用上下文;

}

/**

*阿宽应用程序上下文-应用程式相关资讯环境

* @返回

*/

publicationstatalapplicationcontextgetapplicationcontext()& amp;gt。

returnapplicationContext(返回应用程序上下文):

}

/**

*阿久名称阿宽豆先生。

*@paramname

* @返回

*/

publicstatcobjectgetbean(字符串名称)>;

returngetApplicationContext().getBean(名称);

}

/**

*阿久类阿宽豆先生。

*@paramclazz

* @paramt函数

* @返回

*/

publicnb(公共备注)

sp;static <T> T getBean(Class<T> clazz){
        return getApplicationContext().getBean(clazz);
    }
 
    /**
     * 通过name,以及Clazz返回指定的Bean
     * @param name
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> T getBean(String name,Class<T> clazz){
        return getApplicationContext().getBean(name, clazz);
    }
}

看上面的代码,可以看到在工具类中一开始是声明了一个ApplicationContext类型的静态变量,但是由于静态变量是不能被Spring容器管理的,一开始用正常的getter和setter方法不能获取到特定的bean,实践证明,需要在此变量的setter方法上加上@Autowired注解,并且去除setter方法中的static关键字。才可实现特定bean的注入。

springboot的应用上下文

springboot上下文有两个

  • ServletWebServerApplicationContext

  • AnnotationConfigServletWebServerApplicationContext(继承上面)

ServletWebServerApplicationContext

该类属于spring-boot-2.1.1Release.jar中,是自springboot诞生就衍生出来的,是spring框架的应用上下文Application的子类。

多说无益,show me code

扩展的功能

首先让我们来看一下,这个类到底做了什么,有什么存在的价值?

private volatile WebServer webServer;
 @Override
 protected void onRefresh() {
  super.onRefresh();
  try {
   createWebServer();
  }
  catch (Throwable ex) {
   throw new ApplicationContextException("Unable to start web server", ex);
  }
 }

在此类中有个WebServer成员变量,让我们用脚趾头想一下也应该可以知道,这其实就是web服务对象,也基本上可以猜测就是跟tomcat相关了(当然也可以是其他web服务器,如jetty)

然后我们又发现了onRefresh方法,相信我们并不陌生,这就是spring核心refresh方法的中一个钩子方法(即表明此时已经加载所有配置bean),进行WebServer对象的创建

 @Override
 protected void finishRefresh() {
  super.finishRefresh();
  WebServer webServer = startWebServer();
  if (webServer != null) {
   publishEvent(new ServletWebServerInitializedEvent(webServer, this));
  }
 }

我们又发现该类存在finishRefresh,仔细想一下,这个也是spring核心#refresh方法中的一个钩子方法(不过这个特别,因为该方法是refresh方法中的最后一步,即会去实例化spring容器中的所有beandefinition对象)

首先赞一个,这个很巧妙,调用了super.finishRefresh() ,并没有丢弃父类的逻辑功能(这点在多态中,我相信还是会有人犯错,本来是扩展功能,但是直接重写,丢弃了父类的方法,当然spring框架开发大佬肯定不会犯这种错误,对吧!)

第二点重点来了,就是startWebServer,也就是在spring完成实例化之后,就会去启动web服务。

AnnotationConfigServletWebServerApplicationContext

首先此类是springboot启动运行run()创建ApplicationContext的实现类,不过很可惜,该类并没有很强的实质性扩展。

唯一作用就是拥有了通过注解加载配置类的作用,即和AnnotationConfigApplication一样,只不过springboot的运行启动已经是通过注解加载bean类**

(虽然是鸡肋,不过这也符合spring创建类的一贯风格,就是每个类都是高内聚的,即每个类除了父类的功能之外,还都拥有其他扩展的作用。即使创建出来还没有用到就被遗弃,但仍然不能阻止spring开发大佬创建该类,哈哈)

以上就是Springboot如何获取上下文ApplicationContext,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/115768.html

(0)

相关推荐

  • 手机如何制作ppt,如何用手机录制PPT制作微课

    技术手机如何制作ppt,如何用手机录制PPT制作微课1.【录屏精灵操作】打开“录屏精灵”,选择“横屏录制”,点击 蓝色小圆圈,会看到屏幕中间出现一个黑色圆圈的阴影上有五个图标(录制手机如何制作ppt、隐藏、直播、主页、截

    生活 2021年10月28日
  • Mysql索引失效的解决方法

    技术Mysql索引失效的解决方法小编给大家分享一下Mysql索引失效的解决方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!背景6千万数据量的

    攻略 2021年11月2日
  • java中物流管理系统怎么实现(基于javaweb的物流配送系统)

    技术Java实现物流配送系统的示例分析今天就跟大家聊聊有关Java实现物流配送系统的示例分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。介绍系统分普通用户、企业

    攻略 2021年12月16日
  • python中wxpy的安装与使用是怎样的

    技术python中wxpy的安装与使用是怎样的python中wxpy的安装与使用是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1.wxpy基本介绍w

    攻略 2021年12月4日
  • Java中类和对象的示例分析

    技术Java中类和对象的示例分析这篇文章主要介绍了Java中类和对象的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。类可以看成是创建Java对象的

    攻略 2021年11月13日
  • pythondate函数用法(pythonannotate函数如何注释点)

    技术Python中missing()函数怎么使用这篇文章主要介绍“Python中missing()函数怎么使用”,在日常操作中,相信很多人在Python中missing()函数怎么使用问题上存在疑惑,小编查阅了各式资料,

    攻略 2021年12月23日