搬砖界的小白
凡所迹遇,绝非偶然
展开
-
《Spring》第二十一篇 事务底层源码解析
一.事务的底层执行原理1. 解析注解@EnableTransactionManagement2. Bean生命周期的初始化后阶段,校验是否需要进行AOP3. 示例FruitsService已经成功生成,并注册到IOC容器中,此时执行pay()方法二. 事务的传播机制原创 2023-02-09 11:07:25 · 224 阅读 · 0 评论 -
《Spring》第二十篇 简单明了的AOP
目录一. Spring AOP 实现动态代理二. 内部如何实现?1. 解析@EnableAspectJAutoProxy2. 判断Bean是否需要进行AOP3. Spring 如何创建代理类何为AOP, 全程为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。一. Spring AOP 实现动态代理假设现在有一个类StudentService, 如果想在不修改StudentService类的源码前提下,原创 2022-05-25 09:59:57 · 161 阅读 · 2 评论 -
《Spring》第十九篇 注解使用 - @Lazy
目录@Target({ElementType.TYPE, ElementType.METHOD, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.FIELD})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface Lazy { /** * Whether lazy initialization should occur. */ boolean原创 2022-03-04 15:52:15 · 467 阅读 · 0 评论 -
《Spring》第十八篇 循环依赖 (二)
目录1. 原型Bean情况下的循环依赖解析2. 构造方法导致的循环依赖3. @Async情况下的循环依赖解析4. @Transaction情况下的循环依赖解析5. BeanFactoryAware下的循环依赖解析1. 原型Bean情况下的循环依赖解析2. 构造方法导致的循环依赖3. @Async情况下的循环依赖解析4. @Transaction情况下的循环依赖解析5. BeanFactoryAware下的循环依赖解析...原创 2022-03-02 23:14:39 · 408 阅读 · 0 评论 -
《Spring》第十七篇 循环依赖 [单例]
目录1. Spring 循环依赖简介1. Spring循环依赖底层源码解析2. 原型Bean情况下的循环依赖解析3. 构造方法导致的循环依赖4. @Async情况下的循环依赖解析5. @Transaction情况下的循环依赖解析6. BeanFactoryAware下的循环依赖解析1. Spring 循环依赖简介循环依赖,顾名思义,就是你中有我,我中有你。在Spring中,一个对象并不是简单的new出来的,而是经过一系列的Bean生命周期, 就是因为Bean生命周期的存在,才产生了循环依赖的问题。在了原创 2022-03-01 22:35:54 · 143 阅读 · 0 评论 -
《Spring》第十六篇 DI自动注入之@Resource注解
目录1. 可以定义的位置2. 简单使用(1) 添加在字段上(2) 添加在方法上3. 底层源码实现原理(1) 寻找注入点(2) 属性注入4. 总结(1) 寻找注入点阶段(2) 依赖注入阶段1. 可以定义的位置从源码的位置看, @Value可以定义在字段,方法,最常见的是定义在属性上@Target({TYPE, FIELD, METHOD})@Retention(RUNTIME)public @interface Resource { String name() default "原创 2022-02-26 23:24:30 · 220 阅读 · 0 评论 -
《Spring》第十五篇 DI自动注入之@Value注解
二. @Value1. 可以定义的位置从源码的位置看, @Value可以定义在属性字段,方法,参数,最常见的是定义在属性上。只有一个属性元素value@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface Value { /原创 2022-02-23 17:59:45 · 347 阅读 · 0 评论 -
《Spring》第十四篇 DI自动注入之@Autowired注解
目录1. 可以定义的位置2. 不同位置上使用的区别3.底层工作原理(1) 寻找注入点(2) 注入点进行注入(一) 字段注入点 - AutowiredFieldElement(二) 方法注入点 - AutowiredMethodElement(3) 属性注入阶段寻找依赖Bean的核心代码逻辑详解4. static的字段或方法为什么不支持?5. @Qualifier 注解的使用6. 总结1. 可以定义的位置从源码的位置看, @Autowired可以定义在构造函数,方法,参数,属性字段,最常见的是定义在属性上原创 2022-02-23 11:29:07 · 570 阅读 · 0 评论 -
《Spring》第十三篇 DI自动注入之autowire装配模型
autowire装配模型的使用表示将属性注入的权利全部交给Spring来完成,包括找bean的权限, 开发者解放双手,无需手动的去指定。常用的模型有no,default,constructor,byName,byType五种形式, 默认是no模式原创 2022-02-19 13:59:34 · 210 阅读 · 0 评论 -
《Spring》第十二篇 推断构造方法机制
1. 简述与样例2. 源码解析3. 属性注入的时机4. 装配过程5. 属性精准映射赋值Spring中的一个bean,需要实例化得到一个对象,而实例化就需要用到构造方法而构造方法的个数又可以分为一个或者多个场景一个类只有一个构造方法:要么是无参的构造方法要么是有参的构造方法如果只有一个无参的构造方法,那么实例化就只能使用这个构造方法了; 如果只有一个有参的构造方法,那么实例化时能使用这个构造方法吗?要分情况讨论:...原创 2022-02-18 11:17:35 · 167 阅读 · 0 评论 -
《Spring》第十一篇 DI手动注入之使用<constructor-arg>标签
1. 简述与样例2. 源码解析3. 构造参数注入时机4. 装配过程5. 属性精准映射赋值依赖注入属于Bean的生命周期的一个很重要的环节,大类可分为使用xml配置和使用注解定义的方式两大类, 也可分为手动注入 和自动注入(现用的最多的方式)本文重点介绍使用XML实现注入的构造函数注入方式,Spring源码版本是5.0不管使用哪种方式实现注入,只要是使用了xml配置文件的方式,第一步都需要解析xml配置文件,解析的过程参见另一篇文章《Spring》第九篇 XML配置文件的解析过程1. 简述原创 2022-02-16 17:07:29 · 672 阅读 · 0 评论 -
《Spring》第十篇 DI手动注入之使用<property>标签
依赖注入属于Bean的生命周期的一个很重要的环节,大类可分为使用xml配置和使用注解定义的方式两大类, 也可分为手动注入 和自动注入(现用的最多的方式)原创 2022-02-16 10:31:26 · 601 阅读 · 0 评论 -
《Spring》第九篇 XML配置文件的解析过程
1. 当启动ClassPathXmlApplicationContext容器时, 为指定的BeanFactory创建一个XmlBeanDefinitionReader阅读器。源码: AbstractXmlApplicationContext.loadBeanDefinitions()/** * Loads the bean definitions via an XmlBeanDefinitionReader. * * @see org.springframework.beans.factor原创 2022-02-12 17:09:41 · 509 阅读 · 0 评论 -
《Spring》第八篇 源码扩展点 - BeanFactoryPostProcessors
一. 概述说明二. Spring源码使用剖析三. 举例说明前提: Spring版本是5.0.x一. 概述说明1. BeanFactoryPostProcessors是Spring容器创建过程中提供的一个重要的扩展点接口, 有一个postProcessBeanFactory()方法, 当根据指定的扫描路径扫描完成后, 此时路径下所有的普通类都转化成BeanDefinition, 此方法就可以获取对某个BeanDefinition中的属性信息进行修改或者覆盖。@FunctionalInterfa原创 2022-01-05 15:38:54 · 162 阅读 · 0 评论 -
《Spring》第七篇 源码注解系列 - @ComponentScan
一. @ComponentScan说明二. 核心步骤详解一. @ComponentScan说明在Spring中, @ComponentScan注解一般都使用在配置类AppConfig上, 定义扫描的路径, 可定义多个路径。 Spring在启动的时候就可以根据注解定义的扫描路径扫描所有的class结尾的文件(target目录下),然后将所有的class普通类转化成BeanDefinition注册到容器中## AppConfig类@ComponentScan({"com.maker","com.pro原创 2022-01-05 15:39:22 · 175 阅读 · 0 评论 -
《Spring》第六篇 Bean的生命周期 - 销毁
一: Bean的生命周期第一阶段: 扫描二: 举例验证一: Bean的生命周期原创 2022-01-18 16:13:25 · 1196 阅读 · 3 评论 -
《Spring》第五篇 Bean的生命周期 - 创建
一. Bean的创建方式二. Spring源码使用剖析三. 举例说明一. Bean的创建方式1. 声明式定义Bean① 使用注解使用@ComponentScan注解定义扫描路径## 配置类@ComponentScan("com.maker")@Configuration@Description("扫描配置类")public class AppConfig {}## UserService - 在扫描路径com.maker下@Componentpublic class U原创 2022-01-18 00:52:47 · 282 阅读 · 0 评论 -
《Spring》第四篇 Bean定义方式
一. 声明式定义Bean二. 编程式定义Bean一. 声明式定义Bean1. 使用注解使用@ComponentScan注解定义扫描路径## 配置类@ComponentScan("com.maker")@Configuration@Description("扫描配置类")public class AppConfig {}## UserService - 在扫描路径com.maker下@Componentpublic class UserService { publi原创 2022-01-12 15:30:38 · 139 阅读 · 0 评论 -
《Spring》第三篇 源码概述
Spring源码的版本: 5.0.X## Spring的启动方式大致可分为以下三种, 第二种和第三种方式基本没人使用了, 以下重点介绍第一种public class SpringTest { public static void main(String[] args) { //第一种方式: 使用注解定义扫描路径,在AppConfig配置类中使用@ComponentSacn注解定义扫描路径 AnnotationConfigApplicationContext con原创 2022-01-05 15:38:15 · 146 阅读 · 0 评论 -
《Spring》第二篇 手写模拟Spring框架核心逻辑
前言Spring技术天天用,但是理论上很欠缺功夫,对于一个Java研发来说,这是不应该的,后面会计划的将技术这块每周三篇博客的频率整理一下,巩固自己的理论知识,博客这块都是自己对技术的理解和认识,如有不足的地方或者错误的地方,欢迎大佬们指出…Spring框架核心逻辑–启动...原创 2020-11-06 17:40:12 · 404 阅读 · 4 评论 -
《Spring》第一篇 IDEA导入Spring源码
想要研究Spring源码,那必须知道如何下载并导入IDEA。 文本记录自己在Windows操作系统下导入源码的过程,避免大家走弯路1. 下载源码Spring官网 https://spring.io/projects/spring-frameworkGithub源码下载地址: https://github.com/spring-projects/spring-frameworkgit 克隆地址...原创 2022-03-17 03:58:04 · 2667 阅读 · 3 评论