
Spring
文章平均质量分 93
Spring框架
vonlinee
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
问题排查记录:A component required a bean of type ‘java.util.List‘ that could not be found.
代码中打印异常堆栈的位置如下图所示,使用的apache-commons-logging打日志,所以将这个logger打印的日志级别配置成DEBUG级别,也可以打印详细信息,帮助排查问题。如果这种方式没搜到,那只能根据控制台日志来看了。全局搜索这个类,这个类是Spring框架的一个类,翻它的源码可以看到下面的代码。解决的方法其实不难,只是仅凭这个报错信息不好直接定位到问题出在哪里,下面我总结一下找到问题根源的几种方式。所以我尝试把断点打在这两个地方,再运行代码,根据断点的信息,已经足够定位问题出现的位置了。原创 2024-11-26 22:23:56 · 2992 阅读 · 1 评论 -
Spring 系列 - 事务管理
其实所谓的加入一个事务就是指的使用同一个数据库连接,所以 handleExistingTransaction 这个方法里,其实针对加入的情况下有一些待加入事务和已存在事务的兼容性方面的判断。根据 AOP 的原理它是肯定要有一个 Advice 的,所以我们直接看具体的拦截器类型就可以知道事务执行流程里方法是怎么调用的,如下图所示。下面模拟一个转账操作。REQUIRES_NEW:如果一个事务被嵌套在另一个事务中并且使用了 REQUIRES_NEW,外部事务可能会在内部事务完成之前提交。原创 2024-10-11 00:35:17 · 1124 阅读 · 0 评论 -
Spring系列 - 循环依赖
最后调用了 addSingleton 方法,此方法的内容就是将 createBean 创建的对象放入 singletonObjects 这个缓存中,并且从 singletonFactories 和 earlySingletonObjects 这两个缓存中移除当前创建的这个 beanName。那么执行 doGetBean 方法时直接从而及缓存中就可以获取到,直接就返回了,就没有后续的那么多操作了。没有构造函数依赖的情况下,会默认通过无参构造创建,先创建这个对象,然后进行相关依赖属性的填充。原创 2024-10-09 17:14:28 · 1274 阅读 · 0 评论 -
Spring系列 Bean的生命周期
org.springframework.beans.factory.support.AbstractBeanFactory#doGetBean 方法实现获取Bean的全部逻辑。利用BeanFactory#resolveDependency获取依赖的Bean对象,实际上也是调用getBean去获取依赖的对象。一般来说用户定义的Bean初始化时机是在 Spring 上下文刷新的最后才进行的,如下图所示。单例创建之前的一个回调方法,将要创建的beanName加入到。将当前的正在创建的beanName移除。原创 2024-10-08 23:55:05 · 1113 阅读 · 0 评论 -
SpringBoot系列 启动流程
下面记录SpringBoot的启动流程原创 2024-10-03 13:21:34 · 1418 阅读 · 1 评论 -
Spring注解系列 - @Autowired注解
Autowired注解可以自动将所需的依赖对象注入到类的属性、构造方法或方法中,从而减少手动注入依赖的代码,并提高代码的可维护性和可测试性。它是Spring容器配置的一个重要注解,与@Required、@Primary、@Qualifier等注解同属容器配置范畴。@Autowired是按照类型注入依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使用按照Bean的名称来装配,可以结合@Qualifier注解一起使用。原创 2024-10-02 18:53:01 · 3079 阅读 · 0 评论 -
Spring系列 AOP实现过程
Spring AOP的使用及实现原理原创 2024-10-01 00:40:41 · 1277 阅读 · 0 评论 -
Spring系列 BeanPostProcessor
本文源码基于spring-beans-5.3.31BeanPostProcessor 是 Spring 框架中的一个接口,用于在 bean 实例化和初始化过程中进行一些回调处理,可以对Bean进行一些扩展或修改。原创 2024-09-30 19:10:07 · 1029 阅读 · 0 评论 -
Spring注解系列 - @Import注解
大致流程如下图所示这三种方式都围绕ConfigurationClassParser#parse方法,用于解析配置类,获取配置类的所有可能配置的BeanDefinition,后续将其注册Bean到容器种简单总结一下三种方式的区别:执行时机。原创 2024-09-30 06:44:32 · 1052 阅读 · 0 评论