Spring 常见问题

简介: 本章中主要解答 Spring 中常见问题和以自己对于这些问题的解读。

常见问题


Spring Ioc


1. Spring Ioc 如何理解?


Ioc 是 Spring Framework 中众多特征之一,表示控制反转,其实反转的过程就是将本来我们需要通过 new 创建对象的过程,交由 Spring Ioc 去完成创建。这些动作 Spring Ioc 都帮我们完成了, 除了对象的创建之外,Ioc 还有一个功能就是实现对象的初始化赋值。


2. BeanDefinition 的核心参数?


BeanDefinition 主要是 Bean 的定义信息在 Spring 中通过 ASM 字节码技术去读取 .class 文件然后获取到Bean 的 BeanDefinition然后通过 BeanDefinition 作为对象的元数据进行定义 Bean。 包含 Bean 的属性值,构造函数参数值以及具体方法实现。允许通过 BeanFactoryPostProcessors 对其进行修改和赋值。


3. BeanPostProcessor 是什么?


BeanPostProcessor 是 Spring Framework 拓展的核心接口,通过 BeanPostProcessor 可以实现 DI 和 AOP,常用的两个类有 AutowiredAnnotationBeanPostProcessor 实现自动注入以及 DefaultAdvisorAutoProxyCreator 实现 AOP 自动代理


4. Spring Ioc 容器的启动过程?


1).初始化一个Reader和Scanner,Reader可以用来注册单个BeanDefinition,Scanner用来扫描得到BeanDefinition


2).通过Reader把配置类注册为一个BeanDefinition


3).调用refresh方法,开始启动Spring容器


4). 先获取一个Bean工厂


5).预先往Bean工厂中添加一些Bean后置处理器,和一些单例bean,和一些其他的配置


6).执行Bean工厂的后置处理器,这里会进行扫描,扫描bean和bean的后置处理器


7).实例化bean的后置处理器并且排序,然后添加到Bean工厂中去


8).初始化用来进行国际化的MessageSource


9).初始化事件广播器


10).注册事件监听器


11).开始实例化非懒加载的单例bean


12).发布ContextRefreshedEvent事件


循环依赖


  1. 为什么 @Autowired 可以实现循环依赖 而 构造函数不可以?


首先Spring Ioc 创建对象分为两个核心的步骤,对象的创建和属性初始化。Bean 在初始化的过程首先需要创建对象,如果通过构造函数的方式进行循环依赖,那么会导致两个对象相互在同一时期望创建导致死循环。


  1. 两个 FactoryBean 是否支持循环依赖?


支持


Spring Aop


1. Spring AOP 如何理解?


Aop 核型是实现对象行为功能的拓展, 比如在对象方法执行之前,之后,或者发生异常。这个过程中进行增加额外的逻辑,通常我们会利用 Aop 机制来实现权限控制,日志记录,缓存,包括事务处理也是 Aop 通过来实现的


2. AOP 最重要的几个要素?


通知(执行时机和执行内容),连接点(执行过程中可插入切面的点),切入点(在何处插入),切面(通知 + 切点)织入

3. @Aspect 最重要的步骤的那些?


AnnotationAwareAspectJAutoProxyCreator 来处理 @Aspect . 在 wrapIfNecessary 方法中判断是否需要代理,以及有那些代理的 advice 已完成代理对象的创建


4. @Before @AfterReturing 这些为什么不需要显示的调用 xxx.preceed()


@Before @AfterReturing 拦截器分别是 AspectJAfterAdvice AspectJAfterThrowingAdvice 都重写了 MethodInterceptor#invoke 方法, 并且在方法中主动调用了  xxx.preceed()


Spring 源码解析











相关文章
|
8月前
|
XML Java 数据格式
Spring-常见问题25问
Spring-常见问题25问
82 0
|
4月前
|
前端开发 Java Spring
关于spring mvc 的 addPathPatterns 拦截配置常见问题
关于spring mvc 的 addPathPatterns 拦截配置常见问题
292 1
|
8月前
|
Java API 对象存储
对象存储OSS产品常见问题之使用Spring Cloud Alibaba情况下文档添加水印如何解决
对象存储OSS是基于互联网的数据存储服务模式,让用户可以安全、可靠地存储大量非结构化数据,如图片、音频、视频、文档等任意类型文件,并通过简单的基于HTTP/HTTPS协议的RESTful API接口进行访问和管理。本帖梳理了用户在实际使用中可能遇到的各种常见问题,涵盖了基础操作、性能优化、安全设置、费用管理、数据备份与恢复、跨区域同步、API接口调用等多个方面。
126 2
|
8月前
|
缓存 Java 数据库
第8章 Spring Security 的常见问题与解决方案(2024 最新版)(下)
第8章 Spring Security 的常见问题与解决方案(2024 最新版)
152 0
|
8月前
|
安全 Java 数据安全/隐私保护
第8章 Spring Security 的常见问题与解决方案(2024 最新版)(上)
第8章 Spring Security 的常见问题与解决方案(2024 最新版)
219 0
|
监控 负载均衡 算法
Spring Cloud常见问题处理和代码分析
@[TOC](目录) Spring Cloud常见问题处理 # 1. 问题:如何在 Spring Cloud 中实现服务注册和发现? 解决方案:使用 Spring Cloud 提供的 Eureka、Zookeeper、Cloud Foundry 和 Consul 等注册中心来实现服务注册和发现。 示例代码: ```java @EnableEurekaServer public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.
135 0
|
Java 测试技术 微服务
升级到Spring Cloud 2021.0.3 常见问题
升级到Spring Cloud 2021.0.3 常见问题
1017 0
|
XML Java 数据格式
面试常见问题-Spring Aop的理解和使用?
面试常见问题-Spring Aop的理解和使用?
156 0
|
XML 存储 缓存
面试常见问题-对Spring IOC的理解和使用?
面试常见问题-对Spring IOC的理解和使用?
128 0
|
XML Java 数据格式
面试常见问题-Spring Bean是如何创建的?
面试常见问题-Spring Bean是如何创建的?
145 0