Spring源码分析专栏
文章平均质量分 97
此专栏是从Spring的大体架构,源码所需工具类,BeanFactory架构,随后对Spring源码进行深度剖析,非简单的基础专栏,该专栏只适用于深度专研Spring的人阅读。
假正经的小柴
双非也有编程梦!在读大三,是一个爱看源码的小伙.....
展开
-
【Spring源码分析】透过源码看透Spring事务
考虑到Spring搞了个事务传播机制,那就需要考虑传播机制带来的影响咯,默认是 Require 传播机制,理解为正常事务就好了.........................原创 2024-03-31 15:42:56 · 695 阅读 · 0 评论 -
【Spring源码分析】Spring之AOP底层源码解析和@Async源码解析
Spring AOP 本质是通过CGLIB动态代理去实现的,它内部是使用的 ProxyFactory 去获取的代理对象,ProxyFactory 支持 JDK 和 CGLIB 动态代理,但是 Spring AOP 在实例化 ProxyFactory 的时候,是使用的 CGLIB 动态代理去获取的代理对象。当代理对象执行方法的时候,首先是去找到ProxyFactory中符合的Advisor,通过里面的Pointcut去筛选,然后将里面的Advice封装成MethodInterceptor对象,最后行成原创 2024-02-27 13:36:01 · 1136 阅读 · 1 评论 -
【Spring源码分析】解析配置类-ConfigurationClassPostProcessor源码分析
通过 ConfigurationClassPostProcessor 把配置类取出来进行解析;配置类只要是被 @Configuration、@Component、@ComponentScan、@Import、@ImportResource 修饰的就算是配置类; 如果配置类上存在 @Component 注解,那就会解析内部类上的配置;如果配置类上存在 @PropertySource 注解,那就会把里面修饰的配置里的k-v放入到Environment中;如果配置类上存在 @ComponentScan 注解,那就原创 2024-02-15 10:00:00 · 847 阅读 · 0 评论 -
【Spring源码分析】Spring的启动流程源码解析
1构建个DefaultBeanFactory注入进去;2构建环境:reader、scanner、一些BeanPostProcessor这些;3通过 ConfigurationClassPostProcessor 去扫描配置类;4然后去实例化容器里的 BeanPostProcessor 到 beanPostProcessors 集合中;5构建事件传播器;6 实例化非懒加载单例Bean到单例池中。原创 2024-02-10 22:12:10 · 1466 阅读 · 2 评论 -
【Spring源码分析】推断构造方法
当有多个构造 @Autowired 注解,但是 required 都为 false 的话,考虑 autowireConstructor 的逻辑。先是将所候选的构造参数个数降序排序,然后逐个去匹配,看看参数是否都能在容器中找到,找不到就换下一个,找到就用该构造原创 2024-02-03 01:03:10 · 1107 阅读 · 0 评论 -
【Spring源码分析】循环依赖的底层源码剖析
singletonObjects:缓存所有经过完成整个生命周期的单例Bean。earlySingletonObjects:缓存未经过完整生命周期的Bean,如果某个Bean出现了循环依赖,就会提前把这个暂时未经过完整生命周期的Bean放入 earlySingletonObjects 中,这个 Bean 如果要经过 AOP,那么就会把代理对象放入到 earlySingletonObjects 中,否则就是把原始对象放入 earlySingletonObjects,但是不管怎样,就算是代理对象,代理对象所代理原创 2024-01-30 15:12:07 · 1080 阅读 · 0 评论 -
【Spring源码分析】@Resource注入的源码解析
若 @Resource 中name没有赋值的话,那么就是咱们常说的:先根据属性名或者参数名进行注入,再根据类型进行注入,就是那个 BeanFactory#resolveDependency 那个方法。@Resource 注解是 jdk 中的,不是 Spring 的;@Resource 和 @Autowire 代码性能上大差不差;@Resource 中的name要是赋值了就只以 name 去查询对应的Bean,不会再根据类型去找了。@Resource 中的 name 要是赋值了,那么会经过一次解析,也就是na原创 2024-01-26 00:37:06 · 761 阅读 · 0 评论 -
【Spring源码分析】从源码角度去熟悉依赖注入(二)
筛选6步记住:@Value ---- autowireCandidate 元数据属性要为 true ----- @Qualifier 限定符若有需匹配 ------- 多Bean的话 @Primary --------@Priority ------属性名或者参数名匹配原创 2024-01-24 11:00:00 · 1344 阅读 · 1 评论 -
【Spring源码分析】从源码角度去熟悉依赖注入(一)
咱说的依赖注入在生命周期就是对应着属性注入的阶段,其中有在自定义MergedBeanDefinitionPostProcessor中手动设置属性值,和设置对应的是BYTYPE还是BYNAME,还有种就是注解的解析了。前俩者就是去找对应的setter方法,后面注解的形式是通过反射的注入..................原创 2024-01-18 17:07:52 · 950 阅读 · 0 评论 -
【Spring源码分析】BeanFactory系列接口解读
BeanFactory:顶层接口,提供了最基础的方法,譬如:getBean、containBean,HierarchicalBeanFactory,子接口,拓展了 层次关系,ListableBeanFactory,子接口,拓展了 枚举 能力AutowireCapableBeanFactory,子接口,拓展了 自动装配 能力ConfigurableBeanFactory,子接口,拓展了相关组件 可配置化 的能力ConfigurableListableBeanFactory,集大成者原创 2023-11-05 13:51:53 · 311 阅读 · 0 评论 -
【Spring源码分析】执行流程之非懒加载单例Bean的实例化逻辑
本文阐述了 getBean 的主要流程,Bean的生命周期主要呈现在 createBean中,实例化前->加载类->实例化->实例化后->属性填充->初始化前->初始化->初始化后,当然每个阶段前后可能还有一些操作,比如一些解决循环依赖啊,用父工厂去进行操作等等等本篇博客没有提及,后续会进行对应的源码分析原创 2024-01-13 11:46:09 · 1052 阅读 · 0 评论 -
【Spring源码分析】扫描并注册BeanDefinition逻辑
扫描源码一般是接触Spring源码时大家首先去接触的,因为它是去扫描且过滤出符合的条件的Bean的元数据的(注意这里说的是Bean的元数据,并非全是类的元数据,在此过程中用了ASM技术去提取类的元数据进行操作),比如满足includefilter,不是接口,抽象类等等才会被加入候选…原创 2024-01-20 19:32:44 · 971 阅读 · 0 评论 -
【Spring源码分析】Bean的元数据和一些Spring的工具
BeanDefinition 为我们统一了 bean 的元数据,bean 的元数据就是指我们使用 xml 或者注解进行配置的数据,我们的 spring 容器启动之前的第一步就是加载配置数据,这些元数据会被加载到内存中以一个个 beanDefinition 的形式保存在一个 map 中。原创 2023-10-13 15:50:08 · 346 阅读 · 0 评论