面试被问 Spring cloud 上下文,可以这样回答
作者:Damon
程序猿 Damon | 微服务 | 容器化 | 自动化
Spring cloud,相信大家已经耳熟能详了。Spring cloud 是一个基于 Spring boot 实现的云应用开发工具;Spring boot 专注于快速、方便集成的单个个体。
那么问题来了,Spring cloud 单体里的上下文是什么呢?
首先我们回忆下 Spring 的应用上下文,什么是应用上下文呢?可以简单的理解,就是将你需要 Spring 帮你管理的对象放入容器的那么一种容器对象。应用上下文即是 Spring 容器的一种抽象化表述,而我们常见的 ApplicationContext 本质上说就是一个维护 Bean 定义以及对象之间协作关系的牛逼接口。Spring 的核心是容器,而容器并不唯一,框架本身就提供了很多个容器的实现,大概分为两种类型:一种是不常用的 BeanFactory,这是最简单的容器,只能提供基本的 DI 功能;还有一种就是继承了 BeanFactory 后派生而来的应用上下文,其抽象接口也就是我们上面提到的 ApplicationContext,它能提供更多企业级的服务,例如解析配置文件等,这也是应用上下文实例对象最常见的应用场景。有了上下文对象,我们就能向容器注册需要 Spring 管理的对象了。对于上下文抽象接口,Spring 也为我们提供了多种类型的容器实现,可在不同的应用场景选择:
AnnotationConfigApplicationContext: 从一个或多个基于 java 的配置类中加载上下文定义,适用于 java 注解的方式
ClassPathXmlApplicationContext: 从类路径下的一个或多个 xml 配置文件中加载上下文定义,适用于 xml 配置的方式
XmlWebApplicationContext: 从 web 应用下的一个或多个 xml 配置文件加载上下文定义,适用于 xml 配置方式
FileSystemXmlApplicationContext: 从文件系统下的一个或多个 xml 配置文件中加载上下文定义,也就是说系统盘中加载 xml 配置文件
AnnotationConfigWebApplicationContext: 专门为 web 应用准备的,适用于注解方式
这样,只需要将管理的对象(Spring 中我们都称为 bean)、bean 之间的协作关系配置好,通过应用上下文将配置加载到 IOC 容器,让 Spring 替我们管理对象,待我们需要使用对象的时候,再从容器中获取 bean 就可以了,因为容器能为你的程序提供你想要的对象管理服务了。
那么其实一个 Spring cloud 应用程序中有一个“引导上下文”的概念,这个引导上下文是主应用程序的父上下文。引导上下文负责从配置服务器加载配置属性,以及解密外部配置文件中的属性。和主应用程序加载 application 中的属性不同,引导上下文加载 bootstrap 中的属性。配置在 bootstrap 中的属性有更高的优先级,因此默认情况下它们不能被本地配置覆盖。
如果想禁用引导过程,可设置 spring.cloud.bootstrap.enabled=false。
bootstrap 配置文件的应用场景:
使用 Spring Cloud Config 配置中心时,这时需要在 bootstrap 配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息
一些固定的不能被覆盖的属性
一些加密/解密的场景
application 配置文件主要用于 Spring Boot 项目的自动化配置。
结束福利
开源实战利用 k8s 作微服务的架构设计代码:
欢迎大家 star,多多指教。
关于作者
笔名:Damon,技术爱好者,长期从事 Java 开发、Spring Cloud 的微服务架构设计,以及结合 docker、k8s 做微服务容器化,自动化部署等一站式项目部署、落地。Go 语言学习,k8s 研究,边缘计算框架 KubeEdge 等。公众号 程序猿Damon
发起人。个人微信 MrNull008
,个人网站:Damon | Micro-Service | Containerization | DevOps,欢迎來撩。
欢迎关注:InfoQ
欢迎关注:腾讯自媒体专栏
精彩推荐
欢迎关注
版权声明: 本文为 InfoQ 作者【Damon】的原创文章。
原文链接:【http://xie.infoq.cn/article/9d7d4f89994ba831829759a70】。文章转载请联系作者。
评论