![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Spring
文章平均质量分 86
CoderLi_
微信搜一搜:CoderLi
展开
-
Spring — 自动注入 ?
我们经常注入的方式都是类似这样子的@Servicepublic class HelloService { @Autowired private BeanFactory beanFactory; @Autowired public HelloService(ApplicationContext applicationContext) { } @Autowired public void setEnvironment(Environment envi.原创 2021-12-05 16:24:48 · 628 阅读 · 0 评论 -
Spring Converter 体系
最近封装 RPC 相关的模块,领导说数据转换可以考虑使用 Spring 原有的 Converter 体系。Converter<S, T> 最简单的转换器、相关的顶层接口有 ConditionalConverter、GenericConverter、ConverterFactory、ConvertingComparator、ConverterRegistryConversionService Spring 数据转换的入口、它根据相关参数将调用路由到具体的 Converter。 相关的接口和类原创 2022-05-17 12:00:00 · 295 阅读 · 0 评论 -
Spring 实例化顺序&循环依赖问题
今天讨论两个问题、一个是 Spring 实例化所有 bean 的顺序。第二个是循环依赖问题实例化顺序今天发现一篇文章这么描述我当时第一反应就肯定不太对、因为关于 Spring 实例化顺序这个、吃过大亏AbstractApplicationContext#finishBeanFactoryInitialization 中 // Instantiate all remaining (non-lazy-init) singletons. beanFactory.preInstantiateSi.原创 2022-03-29 07:34:46 · 572 阅读 · 0 评论 -
Spring 事件机制
概念在一个完整的事件体系中、存在以下的角色事件:描述发生了什么事情、比如说请求处理完成、Spring 容器刷新完毕事件源:事件的产生者、任何一个事件都必须有一个事件源。比如请求处理完成的事件源就是 DispatcherServlet 、Spring 容器刷新完毕的事件源就是 ApplicationContext事件广播器:事件和事件监听器的桥梁、负责把事件通知给事件监听器事件监听器:监听事件的发生、可以在监听器中做一些处理Spring 事件我们常见的事件可能就是 Application.原创 2022-01-15 14:17:09 · 2548 阅读 · 0 评论 -
Pointcut 表达式
AOP 概念篇今天介绍 Pointcut 的表达式通配符常见的通配符如下…含义一:方法表达式中、代表任意数量的参数@Servicepublic class HelloService { public void sayHi(String name) { System.out.println("hi," + name); } public void sayHi(String firstName, String lastName) { S..原创 2021-12-24 17:23:02 · 4624 阅读 · 0 评论 -
AOP 概念篇
Spring AOP 系列的第一篇先介绍一下 AOP 相关的一些概念。出现的契机在现实中、我们经常需要记录重要操作的流水以及打印相关的日志到日志文件// 微信公众号:CoderLipublic class BizService01 { public void dealBiz(BizDto bizDto) { // 脱敏打印 + 统计上报到运营系统 record(bizDto); // 业务操作 } private void reco原创 2021-12-18 16:49:16 · 217 阅读 · 0 评论 -
Spring 实例化--谁是我的候选人
@Servicepublic class HelloService { @Autowired(required = false) public HelloService(ApplicationContext applicationContext) { // 1⃣️ } @Autowired(required = false) public HelloService(Environment environment) { // 2⃣️ }}快告诉我、Sp.原创 2021-12-04 11:01:29 · 483 阅读 · 0 评论 -
Spring 源码--Bean 实例化
上一篇的 BeanWrapper 我们介绍了 BeanWrapper 的来由。现在我们继续看看 Spring 是如何构造一个 Bean 的。代码不长、也不是特别的复杂/** * 使用合适的实例化策略去创建bean: FactoryMethod,构造器自动注入、或者简单的无参构造器 */protected BeanWrapper createBeanInstance(String beanName, RootBeanDefinition mbd, @Nullable Object[] args).原创 2021-12-04 10:49:18 · 364 阅读 · 0 评论 -
ApplicationContext 源码分析
BeanFactory 继承图Spring Boot 中 ApplicationContext 的继承图挺有意思、顶层接口、Configurable、Abstract,然后下面就是比较具体场景的实现类,Environment 也是这样的结构。ApplicationContextConfigurableApplicationContextAbstractApplicationContextGenericApplicationContextGenericWebApplicationCont.原创 2021-12-04 09:58:59 · 338 阅读 · 0 评论 -
BeanWrapper
文章稍微有点儿长…BeanWrapper 是 Spring 中比较重要的一个接口、我们在 Spring 获取单例流程(三) 中曾见过PropertyDescriptor 我们在 Java 内省 有介绍过我们先一个个的介绍它所继承的接口PropertyEditorRegistry要介绍 PropertyEditorRegistry 首先要介绍下 PropertyEditor。PropertyEditor俗称属性编辑器、原本只是在 GUI 中将字符串转换为 Java 对象的相应类型的、比如说原创 2021-11-30 20:26:03 · 1159 阅读 · 4 评论 -
Environment 概述
概述Environment 这个接口代表应用运行时的环境。它代表了两方面、一个是 profile 一个是 properties。访问 property 的方法通过 Environment 继承的接口 PropertyResolver 暴露出去。根据 profile 是否被激活、控制着哪些 bean 的信息会被注册到 Spring 的容器中。Environment 的作用就是提供获取当前哪些 profile 被激活、哪些 profile 是默认被激活的方法。properties 的来源有以下的几个方面原创 2021-03-13 22:15:32 · 6736 阅读 · 0 评论 -
探秘 Spring 的 PropertyEditor
Spring 源码系列Spring 整体架构编译Spring5.2.0源码Spring-AliasRegistry 别名注册Spring 资源加载Spring 容器初始化Spring 获取单例(一)Spring 获取单例(二)Spring 获取单例(三)Spring 解决循环依赖Spring FactoryBean 缓存Spring Aware 介绍Spring BeanPostProcessor 介绍扯淡 Sprin...原创 2020-07-15 11:19:18 · 287 阅读 · 0 评论 -
spring bean post processor
相关文章Spring 整体架构编译Spring5.2.0源码Spring-资源加载Spring 容器的初始化Spring-AliasRegistrySpring 获取单例流程(一)Spring 获取单例流程(二)Spring 获取单例流程(三)Spring 循环依赖Spring FactoryBean 缓存Spring Aware 接口Spring beanPostProcessor上一篇文章我们聊了下 Aware接口、今天我们再来聊一下 BeanPostProcessor吧原创 2020-07-01 18:06:08 · 118 阅读 · 0 评论 -
扯淡 Spring BeanDefinition
相关文章Spring 整体架构编译Spring5.2.0源码Spring-资源加载Spring 容器的初始化Spring-AliasRegistrySpring 获取单例流程(一)Spring 获取单例流程(二)Spring 获取单例流程(三)Spring 循环依赖Spring FactoryBean 缓存Spring Aware 接口Spring beanPostProcessor大多数的方法都能从它的名字知道它是干啥的、都能在 XML 配置文件中找到对应的配置项大部分原创 2020-07-01 11:05:11 · 166 阅读 · 0 评论 -
Spring Aware 介绍
读完这篇文章你将会收获到Aware的使用和介绍BeanFactoryAware的触发时机ApplicationContextAware的触发时机以及它通过扩展 BeanPostProcessor来实现我们在 getBean流程中曾经谈到过 Spring回调 Aware接口 private void invokeAwareMethods(final String beanName, final Object bean) { if (bean instanceof Aware) .原创 2020-06-15 20:45:54 · 794 阅读 · 0 评论 -
Spring FactoryBean 缓存
相关文章Spring 整体架构编译Spring5.2.0源码Spring-资源加载Spring 容器的初始化Spring-AliasRegistrySpring 获取单例流程(一)Spring 获取单例流程(二)Spring 获取单例流程(三)Spring 循环依赖…读完这篇文章你将会收获到DisposableBean的 destroy执行Spring如何缓存 FactoryBean产生的单例 bean如何解决 FctoryBean的 getObject的循环依赖不多B原创 2020-06-07 18:45:36 · 1133 阅读 · 7 评论 -
Spring 整体架构
概览Spring 是一个分层架构、由一系列的模块组成Core Container核心容器,包含了 Core、Beans、Context、Expression Language 模块。Core 和 Beans 模块是框架的基础部分、提供 IOC (控制反转)和依赖注入特性,这里的基础概念是 BeanFactory。Core: 主要包含 Spring 框架基本的核心工具类,Spring 的其他组件都要用到这个包里的类,Core 模块是其他组件的基本核心。Beans: 包含访问配置文件、创建和管理原创 2020-06-06 17:45:19 · 277 阅读 · 0 评论 -
Spring — 循环依赖
读完这篇文章你将会收获到Spring循环依赖可以分为哪两种Spring如何解决 setter循环依赖Spring为何是三级缓存 , 二级不行 ?Spring为啥不能解决构造器循环依赖概述循环依赖就是循环引用,两个或以上的 bean相互持有对方。比如说 beanA引用 beanB, beanB引用 beanC, beanC引用 beanA, 它们之间的引用关系构成一个环。Spring 如何解决循环依赖Spring中的循环依赖包括构造器循环依赖setter循环依赖构造器的依赖S原创 2020-06-05 13:55:50 · 1321 阅读 · 0 评论 -
Spring 获取单例流程(三)
读完这篇文章你将会收获到Spring何时将 bean加入到第三级缓存和第一级缓存中Spring何时回调各种 Aware接口、BeanPostProcessor、InitializingBean等相关文章Spring 获取单例流程(一)Spring 获取单例流程(二)Spring 循环依赖 (公众号内查看(同时发布无法获取到链接))概述上两篇文章 Spring 获取单例流程(一) 和 Spring 获取单例流程(二) 介绍了 getBean前面的流程,今天最后的收尾,把后面的流程继续一原创 2020-06-05 13:55:04 · 104 阅读 · 0 评论 -
Spring 获取单例流程(二)
读完这篇文章你将会收获到Spring中 prototype类型的 bean如何做循环依赖检测Spring中 singleton类型的 bean如何做循环依赖检测前言继上一篇文章 Spring 获取单例流程(一) 我们这次继续往下分析一下后面的流程上一篇文章中我们说到,首先我们根据 name找到其对应的 beanName、然后去缓存中看是否已经创建了/创建中这个对应的 bean,如果在缓存中找到了这个 bean、那么我们需要对这个 bean可能进行一些处理,比如说用户想要的是一个普通的 bea原创 2020-05-31 19:23:03 · 166 阅读 · 0 评论 -
Spring 获取单例流程(一)
读完这篇文章你将会收获到在 getBean方法中, Spring处理别名以及 factoryBean的 nameSpring如何从多级缓存中根据 beanName获取 beanSpring如何处理用户获取普通 bean和 factoryBean引言从 Spring 容器的初始化 中,我们了解到 Spring是如何将 XML文件转换为 BeanDefinition并注册到 BeanDefinitionRegstry。今天我们一起继续学习 Spring的 bean加载public static原创 2020-05-30 17:49:22 · 612 阅读 · 0 评论 -
Spring-AliasRegistry
使用Spring 的时候我们可以很容易的为某个bean 配置一个或多个别名<bean id="app:dataSource" class="..."> <alias name="app:dataSoure" alias="user:dataSoure"/> <alias name="app:dataSoure" alias="device:dataSoure"/> </bean> 或者: 直接使用bean标签的name属性,就是别名 &l原创 2020-05-23 14:41:26 · 338 阅读 · 0 评论 -
编译Spring5.2.0源码
下载 spring-framework-5.2.0.RELEASE.ziphttps://github.com/spring-projects/spring-framework/releases下载gradle 5.6.3 按照说明配置环境变量https://gradle.org/install/解压zip、查看根目录下的 import-into-idea.md执行脚本 (windows 系统).\gradlew.bat :spring-oxm:compileTestJava成功之后、原创 2020-05-23 14:40:36 · 961 阅读 · 0 评论 -
Spring-资源加载
在 Java 中,将不同来源的资源抽象成 URL,通过注册不同的 handler( URLStreamHandler) 来处理不同来源的资源的读取逻辑。然而 URL没有默认定义相对 Classpath 或 ServletContext 等资源的 handler ,虽然可以注册自己的 URLStreamHandler 来解析特定的 URL 前缀(协议)。但是 URL 也没有提供基本的方法、如检查当前资源是否存在,检查资源是否存在等方法。URL: 我可以加载各种的资源…XXXSpring: 你是个好人原创 2020-05-23 14:38:12 · 714 阅读 · 0 评论 -
Spring 容器的初始化
读完这篇文章你将会收获到了解到 Spring 容器初始化流程ThreadLocal 在 Spring 中的最佳实践面试中回答 Spring 容器初始化流程引言我们先从一个简单常见的代码入手分析<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "https://www.springframework.org/dtd/spring-beans-2原创 2020-05-23 14:29:58 · 1033 阅读 · 0 评论