![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
spring
文章平均质量分 82
fo3hd
#走出舒适圈,勇于探索未知#
展开
-
解读注解@Value占位符替换过程
其中embeddedValueResolvers是PropertySourcesPropertyResolver以及PropertySourcesPlaceholderConfigurer,这两个对象是在属性填充之前已经准备好,上一篇文章最开始加载配置资源的也有提到,org.springframework.context.support.PropertySourcesPlaceholderConfigurer#postProcessBeanFactory方法,具体看这个方法。原创 2023-08-15 19:12:13 · 1251 阅读 · 0 评论 -
源码断点分析Spring的占位符(Placeholder)是怎么工作的
基于Spring bean的生命周期,BeanFactoryPostProcessor执行方法postProcessBeanFactory,解析获取到属性源即environmentProperties以及localProperties两种,跟着解析占位符,然后得到具体的值,最后set进去替换占位符为具体的属性值。其中属性myPropertyName是带有’ ${}’ 符号,也就是占位符的变量,最终需要替换成具体的值,Spring会最终替换,那么它怎么做到的?下面就通过打断点跟源码方式分析来分析说明。原创 2023-08-14 20:52:42 · 1213 阅读 · 0 评论 -
bean mvcUrlPathHelper could not be registered. A bean with that name has already been defined
A bean with that name has already been defined and overriding is disabled.原创 2022-10-13 16:25:57 · 761 阅读 · 0 评论 -
SpringMVC加载过程并附上过程源码
开局先盗 (偷) 一张网上的图:从图中,可以看出 DispatcherServlet 这个类充当了中央控制器的角色,客户端发起请求需要经过它,中间每一个处理环节也要经过它处理再返回。每次请求都先进入到这里DispatcherServlet#doDispatchprotected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception { HttpServletReques原创 2022-03-17 18:39:36 · 1347 阅读 · 0 评论 -
Spring解决循环依赖过程
依赖注入三种方式构造器注入set方法注入注解方式注入循环依赖场景我们知道spring是通过依赖注入(DI)来完成属性的填充,而循环依赖是指实例化两个bean互相依赖对方的情况,比如A依赖B,B又依赖了A的情况,如图实例化A时候发现依赖B,从而转去实例化B,在实例化B过程中又发现依赖了A,转去实例化A,如果没有应对策略,spring实例化bean过程就会出现死循环,所以为了解决这个问题,spring是使用了三级缓存,分别为如下所示:Map<String, Object> sin原创 2021-12-26 16:19:07 · 497 阅读 · 2 评论 -
spring-kafka消费线程加载过程分析
因为最近遇到spring-kafka消费线程中断消费的问题,所以看了它消费线程的启动过程,来总结一下。Lifecycle和SmartLifecycle要想知道它的加载过程,首先要先了解这两个接口:Lifecycle是Spring中最基础的生命周期接口,该接口定义了容器启动和停止的方法。SmartLifecycle是对Lifecycle的一个扩展接口,相比Lifecycle增加以下功能:无需容器显示调用start()方法,就可以回调SmartLifecycle接口的start()容器中如果有多个原创 2021-12-23 01:14:08 · 1857 阅读 · 0 评论 -
非常详细的Spring bean生命周期图
去年也画过一张图:在这里现在回头看看,没脸看-_-原创 2021-12-10 07:46:12 · 474 阅读 · 0 评论 -
ImportBeanDefinitionRegistrar作用原理介绍
介绍简单的说,就是在spring应用启动过程,一些被@Import注解的类(这些类都实现了ImportBeanDefinitionRegistrar接口)会执行ImportBeanDefinitionRegistrar的registerBeanDefinitions方法,然后生成BeanDefinition对象,并最终注册到BeanDefinitionRegistry中,为后续实例化bean做准备的。在哪里用到了?以我们非常熟悉的spring boot应用为例,启动类就包含了,@SpringBoot原创 2021-12-07 12:04:53 · 8981 阅读 · 0 评论 -
Spring依赖注入Bean为空,注入失效场景
场景介绍使用spring往一个bean(BeanB)注入另一个bean(BeanA),发现BeanA为null,注入失败了。代码展示/** * @author huangd * @date 2021-11-30 **/@Componentpublic class BBean { @Autowired private ABean aBean; public BBean() { System.out.println("BBean instantiatio原创 2021-11-30 13:12:35 · 4981 阅读 · 0 评论 -
FactoryBean它是怎么创建一个bean的?
FactoryBeanspring通过ioc创建bean实例和初始化bean,我们可以通过注解方式创建,如@Component、@Service、@Controller等等也可以在@Configuration类中使用@Bean注解来创建还有一种是通过FactoryBean接口来创建。就是说如果初始化bean过程比较复杂,您可以创建自己的 FactoryBean,在该类中编写复杂的初始化逻辑,通过FactoryBean方式来创建。The FactoryBean interface provides原创 2021-11-26 17:39:28 · 1041 阅读 · 0 评论 -
Spring注解@Bean加载过程详解
1. 前言@Bean注解是很常见的,在spring项目中随处可见,如果要定义一个bean让spring帮助我们管理,那么只要在一个带有@Configuration注解的类下面定义即可。比如:@Configurationpublic class Xxx{@Beanpublic MyBean yyds() {return new MyBean();}}这样启动spring应用后,一个name叫yyds的bean会被注入到spring容器中。2. 过程解析那么spring是怎么做的呢?下面原创 2021-11-12 16:28:59 · 3427 阅读 · 1 评论 -
ApplicationListener监听器使用介绍,@Order加载顺序无效解析
ApplicationListener是Spring事件机制的一部分,与抽象类ApplicationEvent类配合来完成ApplicationContext的事件发布订阅机制。ApplicationEventpackage com.example.demo.event;import org.springframework.context.ApplicationEvent;/** * @author huangd * @date 2021-11-09 **/public class Ob原创 2021-11-10 11:40:44 · 2993 阅读 · 0 评论 -
spring beanFactory后处理器之BeanDefinitionRegistryPostProcessor原理解析
以上是spring官方文档的描述,翻译过来BeanDefinitionRegistryPostProcessor其实就是用来注册BeanDefinition的。我们都知道,如果为了让spring容器能够实例化各个Bean,就必须先有对应的BeanDefinition,所以这个接口就是为了这个作用的。其中大名鼎鼎的BeanFactoryPostProcessor的实现类ConfigurationClassPostProcessor也实现了这个接口。怎么用?这里以spring boot应用为例定义B.原创 2021-11-05 22:34:12 · 385 阅读 · 0 评论 -
spring依赖注入注解@Autowired和@Resource原理解析
注解@Autowired和@Resource都可以实现Bean的自动注入。其中@Autowired是通过Bean后处理器 BeanPostProcessor实现类AutowiredAnnotationBeanPostProcessor来完成。而@Resource是通过另外一个CommonAnnotationBeanPostProcessor来实现的。那么Spring是怎么做到区分的呢?先看AbstractAutowireCapableBeanFactory,实例化bean会调用这个类的doCreat原创 2021-11-02 22:33:52 · 1181 阅读 · 4 评论 -
spring boot自动注入redisTemplate的redis连接池究竟有几个连接,超时时间又是多少
前言redis由于它是一种基于内存操作的高性能分布式数据库,很受大众喜爱,经常出现项目中,可以说是开发必备技能。原创 2021-10-20 11:40:33 · 3812 阅读 · 0 评论 -
一张图介绍spring bean生命周期
最近被问到spring bean的生命周期,发现自己答不出来-_-,整理一张图,做个笔记吧。原创 2020-06-05 21:50:10 · 206 阅读 · 0 评论 -
spring一些总结
说到spring,我想只要是做java的都会很熟悉,在开发中应该是使用频率最高的框架之一了,无论是web应用还是java应用都能快速接入来实现我们的需求。以下总结是小弟最近在深入学习spring的个人总结,也希望通过写博客方式加深理解。开始吧…go有时候我们无法通过注解来拿到spring容器中的bean,这时候可以通过上下文,即ApplicationContext来获取bean。为了得到上下...原创 2019-04-25 10:47:00 · 123 阅读 · 0 评论