Spring八股
Spring
Spring框架核心特性
IoC容器,AOP,事务管理,MVC框架
Spring IOC 实现机制
反射,依赖注入,设计模式 - 工厂模式,容器实现
Spring AOP 实现机制
Spring AOP的实现依赖于动态代理技术
基于JDK的动态代理
基于CGLIB的动态代理
依赖倒置
高层模块不依赖低层模块,它们共同依赖同一个抽象
如果让你设计一个SpringIoc,你觉得会从哪些方面考虑
Bean的生命周期管理
依赖注入
Bean的作用域
AOP功能的支持
异常处理
配置文件加载
动态代理是什么?
Java的动态代理是一种在运行时动态创建代理对象的机制,主要用于在不修改原始类的情况下对方法调用进行拦截和增强
AOP实现有哪些注解
反射具有以下特性:
运行时类信息访问,动态对象创建,动态方法调用,访问和修改字段值
spring是如何解决循环依赖的
三级缓存
实例化 Bean:Spring 在实例化 Bean 时,会先创建一个空的 Bean 对象,并将其放入一级缓存中
属性赋值:Spring 开始对 Bean 进行属性赋值,如果发现循环依赖,会将当前 Bean 对象提前暴露给后续需要依赖的 Bean(通过提前暴露的方式解决循环依赖)。
初始化 Bean:完成属性赋值后,Spring 将 Bean 进行初始化,并将其放入二级缓存中。
注入依赖:Spring 继续对 Bean 进行依赖注入,如果发现循环依赖,会从二级缓存中获取已经完成初始化的 Bean 实例。
Spring的事务什么情况下会失效
未捕获异常,非受检异常,事务传播属性设置不当,多数据源的事务管理,跨方法调用事务问题,事务在非公开方法中失效
Spring的事务,使用this调用是否生效?
不能生效。
Bean的生命周期
Spring启动,查找并加载需要被Spring管理的bean,进行Bean的实例化
Bean实例化后对将Bean的引入和值注入到Bean的属性中
如果Bean实现了BeanNameAware接口的话,Spring将Bean的Id传递给setBeanName()方法
如果Bean实现了BeanFactoryAware接口的话,Spring将调用setBeanFactory()方法,将BeanFactory容器实例传入
如果Bean实现了ApplicationContextAware接口的话,Spring将调用Bean的setApplicationContext()方法,将bean所在应用上下文引用传入进来。
如果Bean实现了BeanPostProcessor接口,Spring就将调用他们的postProcessBeforeInitialization()方法。
如果Bean 实现了InitializingBean接口,Spring将调用他们的afterPropertiesSet()方法。类似的,如果bean使用init-method声明了初始化方法,该方法也会被调用
如果Bean 实现了BeanPostProcessor接口,Spring就将调用他们的postProcessAfterInitialization()方法。
此时,Bean已经准备就绪,可以被应用程序使用了。他们将一直驻留在应用上下文中,直到应用上下文被销毁。
如果bean实现了DisposableBean接口,Spring将调用它的destory()接口方法,同样,如果bean使用了destory-method 声明销毁方法,该方法也会被调用
Spring 只帮我们管理单例模式 Bean 的完整生命周期
Spring bean的作用域有哪些?
Singleton(单例),Prototype(原型),Request(请求),Session(会话) ,Application,WebSocket,Custom scopes
Spring容器里存的是什么?
在Spring容器中,存储的主要是Bean对象。
MVC分层
视图(view),模型(model): 代表一个存取数据的对象或 JAVA POJO,控制器(controller): 用于将用户请求转发给相应的 Model 进行处理
Spring MVC的工作流程如下:
用户发送请求至前端控制器DispatcherServlet
DispatcherServlet收到请求调用处理器映射器HandlerMapping。
处理器映射器根据请求url找到具体的处理器,生成处理器执行链HandlerExecutionChain(包括处理器对象和处理器拦截器)一并返回给DispatcherServlet。
DispatcherServlet根据处理器Handler获取处理器适配器HandlerAdapter执行HandlerAdapter处理一系列的操作,如:参数封装,数据格式转换,数据验证等操作
执行处理器Handler(Controller,也叫页面控制器)。
Handler执行完成返回ModelAndView
HandlerAdapter将Handler执行结果ModelAndView返回到DispatcherServlet
DispatcherServlet将ModelAndView传给ViewReslover视图解析器
ViewReslover解析后返回具体View
DispatcherServlet对View进行渲染视图(即将模型数据model填充至视图中)。
DispatcherServlet响应用户
HandlerAdapter:负责调用处理器(Controller)来处理请求
HandlerMapping负责将请求映射到处理器(Controller)
怎么理解SpringBoot中的约定大于配置
自动化配置,默认配置,约定优于配置
SpringBoot自动装配原理
基于Spring Framework的条件化配置和@EnableAutoConfiguration注解实现
SpringBoot 在启动时会扫描外部引用 jar 包中的META-INF/spring.factories文件,将文件中配置的类型信息加载到 Spring 容器
@EnableAutoConfiguration: 这个注解是 Spring Boot 自动装配的核心
spring-boot-starter-web:这是最常用的起步依赖之一,它包含了Spring MVC和Tomcat嵌入式服务器,用于快速构建Web应用程序
Mybatis里的 # 和 $ 的区别?
Mybatis 在处理 #{} 时,将 SQL 中的 #{} 替换为 ? 号,在执行 SQL 时会为预编译 SQL 中的占位符(?)赋值
Mybatis 在处理 ${} 时,只是创建普通的 SQL 语句,然后在执行 SQL 语句时 MyBatis 将参数直接拼入到 SQL 里
微服务常用的组件
注册中心,负载均衡,服务通信,配置中心,集中式日志管理,服务保护
负载均衡有哪些算法
简单轮询,加权轮询,简单随机,加权随机,一致性哈希,最小活跃数
服务熔断
当调用链路的某个微服务不可用或者响应时间太长时,会进行服务熔断,不再有该节点微服务的调用,快速返回错误的响应信息。当检测到该节点微服务调用响应正常后,恢复调用链路
服务降级
为了预防某些功能(业务场景)出现负荷过载或者响应慢的情况,在其内部暂时舍弃对一些非核心的接口和数据的请求,而直接返回一个提前准备好的fallback(退路)错误处理信息