框架源码专题-Spring-0、PostProcessor
1. 增强器分类BeanFactoryPostProcessor BeanPostProcessor InitializingBean 2. BeanFactoryPostProcessor[[MyBeanFactoryPostProcessor.java]] 2.1. 作用beanFactory 的后置处理器,在 BeanFactory 标准初始化之后调用,用来定制和修改 BeanFactory 的内容; 2.2. 时机所有的 bean 定义已经保存加载到 beanFactory,但是 bean 的实例还未创建 2.3. 原理 1)、ioc 容器创建对象的过程中 2)、执行 invokeBeanFactoryPostProcessors(beanFactory) 方法,遍历所有 BeanFactoryPostProcessors 执行他们的 postProcessBeanFactory 方法 如何找到所有的BeanFactoryPostProcessor并执行他们的方法? 1)、直接在BeanFactory中找到所有类型是BeanFactoryPostProcessor的组件,并 ...
Java基础-基本原理-1、反射
1. 定义 在《Thinking in Java》一书中曾说到: 反射机制并没有什么神奇之处,当通过反射与一个未知类型的对象打交道时,JVM 只是简单地检查这个对象,看它属于哪个特定的类,再用它做其他事情之前必须先加载那个类的 Class 对象,那个类的 .class 文件对于 JVM 来说必须是可获取的:要么在本地,要么在网络。普通方式和反射调用区别在于,编译器在编译时打开和检查 .class 文件,而对于反射机制来说,.class 文件在编译时是不可获取的,所以是在运行时打开和检查 .class 文件。 多态也在普通方式的范畴内。RTTI,即 Run-Time Type Identification 运行时类型认定,通过运行时类型信息程序能够使用父类的指针或引用来检查这些指针或引用所指的对象的实际派生类型,是多态实现的技术基础。RTTI 的功能主要是通过 Class 类文件实现的,更精确一点是通过 Class 类文件的方法表实现的。虽然是运行时判断所调用方法具体属于哪个类型,但是父类、子类的所有信息,在编译期是已经知道的了,即.class 文件在编译时已经获取到了。而对于反射 ...
Java基础-基本原理-2、多态与代理
1. 代理1.1. 代理模式设计模式-7、代理模式 1.2. 反射基本原理-1、反射 1.3. 多态性能调优专题-基础-5、JVM-虚拟机栈 https://blog.csdn.net/wenyuan65/article/details/81145900 1.3.1. 动态代理与多态的关系1.4. 多态与反射的区别https://www.51cto.com/article/668984.html 1.5. 框架中的应用https://www.cnblogs.com/Xianhuii/p/16918191.html 2. 实战经验3. 参考与感谢3.1. 黑马程序员https://www.bilibili.com/video/BV1Np4y1z7BU/?p=59&spm_id_from=pageDriver&vd_source=c5b2d0d7bc377c0c35dbc251d95cf204课件已下载:/Volumes/Seagate Bas/001-ArchitectureRoad/资料-java设计模式(图解+框架源码分析 ...
框架源码专题-Spring-5、声明式事务
1. 源码原理@EnableTransactionManagement 的作用原理 1.1. @Import 使用方法 @Import 使用方法 Spring-1、基本原理 1.2. @ EnableTransactionManagement1.2.1. 注册时机与 AOP 的注册时机是相同的:BD 注册:在 refresh() 的第 5 步,invokeBeanFactoryPostProcessors,如下图所示,方法执行完毕后,事务相关 BD 都已注册完毕 1.2.2. TransactionManagementConfigurationSelector⭐️🔴 利用 TransactionManagementConfigurationSelector 给容器中会导入 2 个组件 AutoProxyRegistrar 注册器 (loadBeanDefinitionsFromRegistrars) ❕%%1916-🏡⭐️◼️处理 ImportBeanDefinitionRegistrar 类型的 import 注解 ?🔜MSTM📝 invokeBeanFactory ...
框架源码专题-Spring-6、整合Mybatis
1. 环境准备 ConfigurationClassPostProcessorhttps://www.processon.com/diagraming/63e4bfa27c423a1934f127a5❕%%▶2.🏡⭐️◼️CCPP 是容器环境最重要的准备工作 ?🔜MSTM📝 只有 ConfigurationClassPostProcessor 在 this() 中注册完 BD,在 refresh() 中的第 5 步 invokeBeanFactoryPostProcessors 中创建完 Bean 并执行 postProcessBeanDefinitionRegistry 方法,其他注解才能陆续的被注册 BD 被创建 Bean。◼️⭐️-point-20230220-1406%% 1.1. 注册 BPP 的 BD 1.2. 创建 BPP 的 Bean 2. 注册 MapperScannerConfigurer2.1. 注册 MapperScannerConfigurer BD 2.1.1. @Import(MapperScannerRegistrar) @Import 使用方法 ...
框架源码专题-Spring-2、IOC
1. 容器 API BeanDefinitionRegistry: 定义对 BeanDefinition 的各种增删改查操作 DefaultSingletonBeanRegistry: Bean 仓库 AutowireCapableBeanFactory: 提供创建 Bean, 自动注入, 初始化已经应用 Bean 的后处理器 ConfigurableListableBeanFactory: BeanFactory 配置清单, 指定忽略类型及接口等 DefaultListableBeanFactory: Bean 工厂 2. 工作原理2.1. 工作流程 IOC 是什么 Bean 的声明方式 IOC 的工作流程 IOC 的全称是 Inversion Of Control, 也就是控制反转,它的核心思想是把对象的管理权限交给容器。应用程序如果需要使用到某个对象实例,直接从 IOC 容器中去获取就行,这样设计的好处是降低了程序里面对象与对象之间的耦合性。使得程序的整个体系结构变得更加灵活。 2.1.1. Bean 定义注册Spring 里面很多方式去定义 Bean,(如图)比如 XML ...
框架源码专题-Spring-3、AOP
1. AOP1.1. 分类比较%%▶1.🏡⭐️◼️【🌈费曼无敌🌈⭐️第一步⭐️】◼️⭐️-point-20230507-1556%%❕ ^1m5ekc Spring AOP 和 AspectJ AOP(静态 AOP) 简而言之,Spring AOP 和 AspectJ 有不同的目标。Spring AOP 旨在通过 Spring IoC 提供一个简单的 AOP 实现,以解决编码人员面临的最常出现的问题。这并不是完整的 AOP 解决方案,它只能用于 Spring 容器管理的 beans。 另一方面,AspectJ 是最原始的 AOP 实现技术,提供了完整的的 AOP 解决方案。AspectJ 更为健壮,相对于 Spring AOP 也显得更为复杂。值得注意的是,AspectJ 能够被应用于所有的领域对象https://juejin.im/post/5a695b3cf265da3e47449471 Spring AOP 属于运行时增强,而 AspectJ 是编译时增强。 Spring AOP 基于代理 (Proxying),而 AspectJ 基于字节码操作 (Bytecode Man ...
性能调优专题-基础-10、JVM-启动
1. 启动入口sun.misc.Launcher类是java的入口,在启动java应用的时候会首先创建Launcher类,创建Launcher类的时候会准备应用程序运行中需要的类加载器,位于jre/lib/rt.jar中。 Launcher作为JAVA应用的入口,根据双亲委派模型,Laucher是由JVM创建的,它的类加载器是BootStrapClassLoader, 这是一个C++编写的类加载器,是java应用体系中最顶层的类加载器,负责加载JVM需要的一些类库(/lib),而Launcher类在rt.jar中,正好处于该加载器的加载路径下。 2. 启动流程 3. ClassLoader初始化源码解读12345678910111213141516171819202122//JDK 1.8 public class Launcher { private static Launcher launcher = new Launcher(); //类被加载时,触发创建静态实例对象,进而触发构造函数 public Launcher() { / ...
框架源码专题-Spring-4、SpringMVC
1. SpringMVC 容器启动双十二之 Spring 整合 springmvc https://www.bilibili.com/video/BV1AJ411y72k?p=4&spm_id_from=pageDriver 1.1. 逻辑综述我们知道根据 Servlet3.0规范,web 容器(比如 Tomcat 服务器 (7 及以上版本))在启动应用的时候,会扫描当前应用 每一个jar包 里面的 META-INF/services/javax.servlet.ServletContainerInitializer 文件中指定的实现类,然后再运行该实现类中的方法 而在我们整合 SpringMVC 用到的 spring-web-xxx.RELEASE.jar 中的 META-INF/services/目录里面有一个 javax.servlet.ServletContainerInitializer 文件,并且在该文件中指定的实现类就是 org.springframework.web.SpringServletContainerInit ...
框架源码专题-Spring-1、基本原理
1. 学习来源https://monkback.github.io/post/spring/spring%E5%AE%B9%E5%99%A8%E4%B8%8Eweb%E5%AE%B9%E5%99%A8/ https://www.freesion.com/article/96551187760/ Spring 面试题知识点合集,B 站高质量面试教程! https://www.bilibili.com/video/BV1t44y1C73F?p=3 尚硅谷 spring 源码解析 https://www.bilibili.com/video/BV114411c7hV?p=31 最新 Spring 全家桶 -2021 面试 - 重灾区:Spring/SpringCloud/SpringBoot/SpringMVC,肝完就跳槽 https://www.bilibili.com/video/BV1x64y1x71b?p=55 https://www.bilibili.com/video/BV19v411K7ss?spm_id_from=333.999.0.0 2. 源 ...

