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

Spring面试题——第二篇

1. ApplicationContext通常的实现是什么

FileSystemXmlApplicationContext: 此容器从一个XML文件中加载beans的定义,XML Bean配置文件的全路径名必须提供给他的构造函数。
ClassPathXmlApplicationContext:此容器也从一个XML文件中加载beans的定义,这里需要正确设置classpath,因为这个容器将从classpath里找bean配置。
WebXmlApplicationContext:此容器加载一个XML文件,此文件定义了一个Web应用的所有beans。

2. 什么是Spring IOC容器

Spring IOC容器负责创建对象、管理对象(通过依赖注入),装配对象、配置对象,并且管理这些对象的整个生命周期。
BeanFactory接口提供了一个先进的配置机制,使得任何类型对象的配置称为可能。ApplicationContext接口对BeanFactory进行了扩展,在BeanFactory的基础上添加了其他功能,比如和Spring的AOP更容易集成,也提供了处理message resource(国际化)的机制。
针对Web应用的WebApplicationContext是org.springframework.beans.factory.BeanFactory的Spring IOC容器的具体实现。BeanFactory接口是Spring IOC容器的核心接口。

3. BeanFactory和ApplicationContext有什么区别

BeanFactory可以理解为含有bean集合的工厂类
从表面上看,ApplicationContext和BeanFactory一样具有Bean定义、bean关联关系的设置,根据请求分发bean的功能,但是ApplicationContext在此基础上还提供了其他功能。

  • 提供了支持国际化的文本消息。
  • 统一的资源文件读取方式
  • 已在监听器中注册的bean的事件。

4. Spring 支持的几种Bean的作用域(scope)

  • singleton: bean在每个Spring IOC容器中只有一个实例
  • prototype:一个bean的定义可以有多个实例
  • request:每次http请求都会创建一个bean,该作用域仅在基于web的Spring ApplicationContext情形下有效。
  • session:在一个Http Session中,一个bean定义一个实例,该作用域仅在基于web的Spring ApplicationContext情形下有效。
  • global-session: 在一个全局的HTTP Session中,一个bean定义一个实例,该作用域仅在基于web的Spring ApplicationContext情形下有效。

缺省的Spring bean的作用域是singleton

5. Spring、SpringMVC、Spring Boot有什么区别

  1. Spring
    Spring最重要的特征是依赖注入。所有Spring Modules不是依赖注入就是IOC控制反转。恰当的使用DI或者IOC的时候,可以开发松耦合应用。
  2. Spring MVC
    Spring MVC提供了一种分离式的方法来开发Web应用,通过运用像DispatcherServlet、ModelAndView、ViewResolver等简单概念,开发Web应用将会变的非常简单。
  3. Spring Boot
    Spring和Spring MVC的问题在于需要配置大量的参数,而Spring Boot通过一个自动配置和启动的项来解决这个问题。为了更快的构建产品就绪应用程序,Spring Boot提供了一些肺功能性特征。

6. Spring Boot的核心注解是哪个?由哪几个注解组成

核心注解@SpringBootApplication,由三个注解组成

  • @SpringBootConfiguration:组合了@Configuration注解,实现配置文件的功能。
  • @EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
  • @ComponentScan: Spring组件扫描

7. SpringBoot自动配置原理是什么

自动配置依赖@EnableAutoConfiguration注解开启自动配置功能。

  1. 从配置文件META_INF/spring.factories加载可能用到的自动配置类。
  2. 去重,将exclude、excludeName属性携带的类排除。
  3. 过滤,将满足条件(@Conditional)的自动配置类返回。

8. SpringBoot的自动配置是如何实现的

SpringBoot项目的启动注解是:@SpringBootApplication,其实他是由下面三个注解组成

  1. @Configuration
  2. @ComponnetScan
  3. @EnableAutoConfiguration

其中@EnableAutoConfiguration是实现自动配置的入口,该注解又通过@Import注解导入了AutoConfigurationImportSelector,在该类中加载META-INF/spring.factories的配置信息。然后筛选出以EnableAutoConfiguration为key的数据,加载到IOC容器中

9. Spring Boot和Spring Cloud的区别

Spring Boot专注于快速方便的开发单个个体微服务。

Spring Cloud是关注全局的微服务协调整理治理框架,将Spring Boot开发的一个个单体微服务整合并管理起来,为各个微服务之间提供,配置管理、服务发现、断路器、路由、微代理等等集成服务。

10. Spring Cloud核心组件及其作用,以及SpringCloud工作原理

Spring Cloud由以下几个核心组建构成:
Eureka:各个服务启动时,EurekaClient都会将服务注册到Eureka Server中,并且Eureka Client还可以反过来从Eureka Server拉取注册表,从而知道其他服务在哪里。
Ribbon:服务间发起请求的时候,基于Ribbon做负载均衡。
Feign:基于Feign的动态代理机制,根据注解和选择的机器,拼接请求url,发起请求。
Hystrix:发起请求是通过Hystrix的线程池来走的,不同的服务走不同的线程池,实现了不同服务调用的隔离,避免了服务雪崩的问题。
zuul: 如果前端、移动端要调用后端系统,统一从zuul网关进入,由zuul网关转发请求给对应的服务。

11. Spring Cloud实现服务注册和发现的原理是什么

  1. 服务在发布时指定对应的服务名(服务名包括了IP地址和端口号),将服务注册到注册中心(Eureka或者zookeeper)这一过程是Spring Cloud自动实现的,只需要在main方法添加@EnableDiscoveryClient即可,同一个服务修改端口就可以启动多个实例。
  2. 调用方法:传递服务名称通过注册中心获取所有的可用实例,通过负载均衡策略调用对应的服务。

相关文章:

  • 《论软件架构建模技术与应用》写作框架,软考高级系统架构设计师
  • 【无人机设计与控制】基于改进蚁群算法的机器人_无人机_无人车_无人船的路径规划算法
  • C++——模板
  • Oracle(136)什么是UNDO表空间?
  • 2024 Snap 新款ar眼镜介绍
  • 初写MySQL四张表:(4/4)
  • 2000-2023年中国气候政策不确定性指数(全国、省、市三个层面)
  • uni-app+vue3开发微信小程序使用本地图片渲染不出来报错[渲染层网络层错误]Failed to load local image resource
  • django项目添加测试数据的三种方式
  • 开发者“SmilingWolf”的标签标注模型
  • K8S精进之路-控制器StatefulSet有状态控制 -(2)
  • 基于springboot vue 大学生竞赛管理系统设计与实现
  • 速盾:高防cdn防御的时候会封ip吗?
  • 【线程】线程安全的单例模式
  • C\C++内存管理详解
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 《剑指offer》分解让复杂问题更简单
  • 【Amaple教程】5. 插件
  • 【附node操作实例】redis简明入门系列—字符串类型
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • git 常用命令
  • JS变量作用域
  • JS实现简单的MVC模式开发小游戏
  • Object.assign方法不能实现深复制
  • python大佬养成计划----difflib模块
  • Sequelize 中文文档 v4 - Getting started - 入门
  • supervisor 永不挂掉的进程 安装以及使用
  • Vue官网教程学习过程中值得记录的一些事情
  • windows-nginx-https-本地配置
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 阿里云Kubernetes容器服务上体验Knative
  • 订阅Forge Viewer所有的事件
  • 近期前端发展计划
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 前端存储 - localStorage
  • 前嗅ForeSpider中数据浏览界面介绍
  • 浅谈Golang中select的用法
  • 思维导图—你不知道的JavaScript中卷
  • 我与Jetbrains的这些年
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • #AngularJS#$sce.trustAsResourceUrl
  • #define、const、typedef的差别
  • #QT(QCharts绘制曲线)
  • #Ubuntu(修改root信息)
  • (04)odoo视图操作
  • (16)Reactor的测试——响应式Spring的道法术器
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (四)JPA - JQPL 实现增删改查
  • (四)汇编语言——简单程序
  • (未解决)macOS matplotlib 中文是方框
  • (一)WLAN定义和基本架构转