开源框架
文章平均质量分 83
弯_弯
这个作者很懒,什么都没留下…
展开
-
从JVM源代码的角度一步一步给你讲清楚线程状态的本质以及线程状态的由来
从源码可知,根据操作java字段把java状态的偏移量拿出来,java状态的偏移量就是thread中的成员threadstatus(线程状态)的相对于它对象的头部偏移量,然后把状态state放进去,简单说就是C++中操作java的成员变量,把threadstatus的地址拿出来,把线程的state值放进去,把线程状态修改为sleeping。接来敲黑板,考试重点来了, 线程状态是如何修改的,以javaThread::sleep(jlong millis)为例进行解释,这个过程是在C++中进行的。原创 2023-03-06 09:21:50 · 386 阅读 · 0 评论 -
【JDK源码】一文清晰明白的讲清楚多线程的ThreadLocal,避免因使用ThreadLocal导致内存泄漏
在java的多线程并发执行过程中,为保证多个线程对变量的安全访问,可以将变量放到TrheadLocal类型的对象中,使变量在每个线程中都有独立值,不会出现一个线程读取变量时被另一个线程修改的现象。ThreadLocal类通常被翻译为“线程本地变量”类或者“线程局部变量”类。ThreadLocal 位于JDK的java.lang核心包中,如果程序创建了一个ThreadLocal实例,那么在访问这个变量的值时,每个线程都会拥有一个独立、自己的本地值。ThreadLocal 代表的是线程本地变量,原创 2023-02-27 10:49:57 · 452 阅读 · 0 评论 -
从源码的角度弄明白BeanFactory的后处理的5件事
BeanFactory 作为Spring 中容器功能的基础,用于存放所有已经加载的bean,为了保证程序上的高可扩展性,Spring 针对BeanFactory做了大量的扩展,其中包括激活注册的BeanFactoryPostProcessor,注册BeanPostProcessor,初始化消息资源,初始化ApplicationEvenMulticaster,注册监听器.原创 2023-02-20 09:37:58 · 94 阅读 · 0 评论 -
手把手一步步带您解读创建AOP代理的源码
Spring AOP 的功能基本上都是由AnnotationAwareAspectJAutoPr oxyCreator 来实现的, 那具体是怎么实现的呢,我们先来看一张AnnotationAwareAspectJAutoPr oxyCreator的层次结构图(IDEA 在windows下F4快捷键查看 )到此为止,所有bean的增强器都获取完成并且已经挑选了最合适的增强器,接下来就该创建代理,由AbstractAutoProxyCreator.createProxy()方法实现。①获取当前类中的属性,原创 2023-02-06 09:28:21 · 371 阅读 · 0 评论 -
动态AOP 自动以标签 源码解析
AspectJ框架为AOP 开发提供了一套@AspectJ注解,它允许我们直接在java类中通过注解的方式对切面(Aspect)、切入点(PointCut)和增强(Advice)进行定义,Spring框架可以根据这些注解生成AOP 代理。Spring AOP 是一个简化版的AOP 实现,并没有提供完整的AOP功能,通常情况下,Spring AOP 是能够满足我们日常开发过程中的大多数场景的,但在某些情况下, 我们可能需要使用Spring AOP 范围外的某些AOP 功能。原创 2023-01-30 13:50:32 · 255 阅读 · 0 评论 -
源码深度解析Spring Bean的创建,手把手的一步一步带你看源码
此处方法设置得十分巧妙, 巧妙之处是Spring将一部分的方法匹配工作在这里完成, 如果当前类职工的方法只有一个的时候就设置重载方法没有被重载,这样在后续被调用的时候就可以直接使用功能此方法,从而不需要进行方法的参数匹配验证,还可以提前对方法存在性进行验证.然后: 解析构造函数并进行构造函数的实例化.因为一个bean对应的类中可能会有多个构造函数,而每个构造函数的参数不同,Spring 在根据参数及类型去判断最终会使用哪个构造函数进行实例化.原创 2023-01-28 13:24:39 · 722 阅读 · 0 评论 -
从源码角度带你清楚分析Spring 的Lazy-init 延迟加载机制原理
对于被修饰为lazy-init的bean,Spring 容器初始化阶段不会进行init 并且依赖注入,当第一次进行getBean的时候,才会进行初始化并依赖注入. 对于非延迟加载的bean,getBean的时候会从缓存中获取,因为容器初始化阶段Bean已经初始化完并缓存起来了.原创 2023-01-03 09:18:32 · 440 阅读 · 0 评论 -
一文清晰带你弄清楚Spring IOC 循环依赖问题是如何解决的
循环依赖又被成为循环引用,即两个或者多个bean相互之间的持有对方,比如A 引用B,B引用C,C 又引用A,则它们最终反映为一个环,如下图所示:循环依赖是对象之间的相互依赖关系,循环依赖就是一个死循环,除非有终结条件,否则就是死循环,最终导致内存溢出错误.原创 2022-12-26 15:00:47 · 1303 阅读 · 0 评论 -
从源码的角度解析Spirng 的import标签和alias标签的处理
在上一篇博客《源码深度剖析Spring Bean标签的解析及注册》中描述了bean 标签的解析以及注册。而Spring 的XML 配置文件职工包括import标签、alias标签、bean标签和beans 标签,那么这篇博客就针对剩余的import 标签 、alias标签进行处理。由于beans标签类似于import标签所提供的功能,再次就不在赘述了, 感兴趣的可以自行查看源码。原创 2022-12-20 11:41:13 · 495 阅读 · 0 评论 -
源码深度剖析Spring Bean标签的解析及注册
在博客《一步一步带你深入源码看Spring是如何加载XML配置文件的》中把Spring对XML配置文件如何加载的说明白了,XML配置文件加载完成后就是对标签的解析,本篇博客就是针对Spring bean 标签的解析以及bean definition 的注册。Spring 中的标签包括默认标签和自定义标签两种, 默认标签的解析是在DefaultBeanDefinitionDocumentReader.parseDefaultElement()方法中进行的,原创 2022-12-05 06:06:07 · 313 阅读 · 0 评论 -
一步一步带你深入源码看Spring是如何加载XML配置文件的
解析为document对象,之后就要注册beanDefinition了,在spring的加载过程中,BeanDefinition是一个重要的数据结构,它是在创建对象之前,对象数据的一种存在形式。loadBeanDefinitions()方法调用loadBeanDefinitions()方法用于加载或注册bean definitions,具体代码如下。Spring 的在实际开发过程中都是以XML 配置文件+注解的形式进行使用,那么XML配置文件的读取是Spring中重要的功能,原创 2022-11-28 06:11:14 · 1352 阅读 · 0 评论 -
从源码角度分析Mybatis级联映射的实现原理
Mybatis是一个半自动化ORM框架,可以将数据库中的记录转换为java实体对象,但是java实体属性通常采用驼峰命名法,而数据库字段习惯采用下划线分隔命名法,因此需要用户指定java实体属性与数据库表字段之间的映射关系。mybatis的Mapper 配置中提供了resultMap 标签,用于建立数据库字段与java实体属性之间的映射关系。Mybatis 在启动时,所有配置信息都会被转换为java对象,Mybatis 通过ResultMap类描述resultMap标签的配置信息;原创 2022-11-15 16:13:10 · 562 阅读 · 0 评论 -
一文清晰讲明白DDD(领域驱动设计)的知识点
DDD(领域驱动设计)是一种处理高度复杂领域的设计思想,是一种架构设计方法论,是一种设计模式。以高内聚低耦合为目的,把一个复杂的软件应用系统中各个部分进行一个很好的拆解和封装,对软件系统进行模块化的一种思想。DDD不仅可以用于微服务设计,还可以很好地应用于企业中台的设计,也适用于传统的单体应用。原创 2022-09-22 16:27:43 · 5616 阅读 · 0 评论 -
从源码的角度回答“mybatis的#{} 和${}有什么区别”?
在此方法中对SQL配置的所有子元素进行遍历,如果子元素类型为SQL文本,则使用TextSqlNode对象描述SQL节点信息,若SQL节点中存在${} 参数占位符,则是设置为动态SQL, 如果子元素未、、等标签,则使用NodeHandler处理,并设置为动态SQL;在了解#{ } 和${} 区别之前,我们需要先来了解一下动态SQL以及动态SQL的解析过程,动态SQL 指的是事先无法预知具体的条件,需要运行时根据具体的情况动态生成SQL语句。在解析动态sql的时候,对#{}进行了相关的解析处理。原创 2022-09-16 09:53:54 · 154 阅读 · 0 评论 -
spring IOC 学习笔记整理
IOC 是Inversion of control的简写,译为“控制反转”,它不是一门技术,而是一门设计思想,Spring 通过IOC 容器来管理所有java对象的实例化和初始化,控制对象与对象之间的依赖关系。在传统的java应用中,一个类想要调用另一个类的属性或方法,通常会先在其代码中通过new Object 的方式将后者的对象创建出来,然后才能实现属性或方法的调用。即调用者掌控者被调用者对象创建的控制权。原创 2022-09-06 09:15:47 · 149 阅读 · 0 评论 -
从源码角度看Mybatis如何通过拦截器实现插件的使用
Plugin.getSignatureMap()方法对Intercepts注解进行解析,首先获取Intercepts注解,然后获取ntercepts注解中配置的所有Signature注解,接着对所有的Signature注解信息进行遍历,将Signature注解中指定要拦截的组件及方法添加到Map对象中,其中Key为Executor、ParameterHandler、ResultSetHandler或StatementHandler对应的Class对象,Value为拦截的所有方法对应的Method对象数组。.原创 2022-07-25 09:46:49 · 171 阅读 · 0 评论 -
从源码的角度回答“mybatis的#{} 和${}有什么区别”?
在此方法中对SQL配置的所有子元素进行遍历,如果子元素类型为SQL文本,则使用TextSqlNode对象描述SQL节点信息,若SQL节点中存在${}参数占位符,则是设置为动态SQL,如果子元素未、、等标签,则使用NodeHandler处理,并设置为动态SQL;使用#{}参数占位符能够有效避免SQL注入问题,所以我们优先考虑使用#{}占位符,当#{}参数占位符无法满足需求时,才考虑使用${}参数占位符。......原创 2022-07-21 09:47:27 · 136 阅读 · 0 评论 -
从源码的角度理解并应用Mybatis的延迟加载机制与原理
延迟加载也称为懒加载。其含义是:暂时不用的对象不会真正加载到内存职工,直到真正需要使用该对象时,才会执行数据库查询操作,将该对象加载到内存中。这种方式能够在一定程度上减少数据库IO次数,提升系统性能。...原创 2022-07-12 13:40:32 · 218 阅读 · 0 评论 -
4步带你看懂SqlSession是如何执行Mapper过程的
Mapper由两部分组成,分别为Mapper接口和通过注释或者XML文件配置的SQL语句。SqlSession 执行Mapper过程可以分为四步:Mapper接口注册、MappedStatement注册、Mapper方法调用、SqlSession 执行Mapper。原创 2022-07-04 09:28:56 · 866 阅读 · 0 评论 -
从源码的角度回答“mybatis的#{} 和${}有什么区别”?
从源码的角度回答“mybatis的#{} 和${}有什么区别”原创 2022-06-29 09:07:02 · 104 阅读 · 0 评论 -
开源框架(四):mybatis 两种开发方式 映射开发与注解开发
mybatis 两种开发方式 映射开发与注解开发[原创 2022-06-28 09:12:33 · 278 阅读 · 0 评论 -
开源框架(三) :你知道mybatis的初始化是怎么使用建造者模式创建对象的吗
Builder 建造者模式(创建型对象类型):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示;mybatis 初始化的主要工作是加载并解析mybatis-config配置文件,映射配置文件以及相关的注解信息....原创 2022-06-27 09:16:51 · 271 阅读 · 0 评论 -
开源框架(二): mybatis 的XML 映射开发与注解开发 笔记
mybatis 查询方式,一对一,一对多,多对多的映射方式原创 2022-06-14 15:00:23 · 216 阅读 · 0 评论 -
开源框架(一): mybatis 入门
ORM -对象/关系数据库映射ORM全称Object/Relation Mapping:表示对象-关系映射的缩写。ORM完成面向对象的编程语言到关系数据库的映射。当ORM框架完成映射后,程序员既可以利用面向对象程序设计语言的简单易用性,又可以利用关系数据库的技术优势。ORM把关系数据库包装成面向对象的模型。ORM框架是面向对象设计语言与关系数据库发展不同步时的中间解决方案。采用ORM框架后,应用程序不再直接访问底层数据库,而是以面向对象的放松来操作持久化对象,而ORM框架则将这些面向对象的操作转换成底层原创 2022-05-17 15:00:52 · 306 阅读 · 0 评论