![](https://img-blog.csdnimg.cn/20210127221348661.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
源码分析
文章平均质量分 76
JAVASE、JAVAEE源码分析
素净小凡人
一个在后端路上的小程序猿
展开
-
Explain分析SQL语句
一、Explain使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析查询语句或是结构的性能瓶颈 在 select 语句之前增加 explain关键字,MySQL 会在查询上设置一个标记,执行查询会返 回执行计划的信息,而不是执行这条SQL 注意:如果 from中包含子查询,仍会执行子查询,将结果放入临时表中explain 两个变种1)explain extended:会在 explain 的基础上额外提供一些查询优化的信息。紧随其后通 过 show warnings 命令可以得到优化后的查原创 2021-01-28 20:30:54 · 1184 阅读 · 0 评论 -
Mybatis源码分析-selectList源码分析
文章目录一、开篇二、源码分析1.selectList()2.CachingExecutor3、createCacheKey1)为什么CachingExecutor要调用SimpleExecutor的方法去创建缓存key呢?4、创建好缓存key之后:query查询二级缓存5、如果二级缓存为空继续走查询query查询一级缓存6、查询一级缓存为空queryFromDatabase查询数据库三、演示四、总结一、开篇在我们分析Executor的时候最后一步就是查询我们的数据库 本篇就是去深究一下Mybatis原创 2021-01-26 20:07:32 · 1484 阅读 · 0 评论 -
Mybatis源码分析-getMapper()源码分析
一个接口没有实现类能执行方法吗?答案:能!我们看一下这段代码 UserMapper mapper = sqlSession.getMapper(UserMapper.class); //6、执行SQL语句 List<User> users = mapper.selectAllUser(new Random().nextInt());我们都知道在Mybatis中调用SqlSession的GetMapper方法就可以拿到我们的Mapper,然后调用...原创 2021-01-26 19:28:24 · 323 阅读 · 0 评论 -
Mybatis源码分析-Executor执行器源码分析
文章目录一、调用写法二、原生写法三、源码分析1.代理类的invoke方法2.invoke方法源码3.sqlSession.selectOne();4.selectList()一、调用写法 SqlSession sqlSession = sqlSessionFactory.openSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); List<User> users原创 2021-01-26 18:43:12 · 284 阅读 · 0 评论 -
Mybatis源码分析-openSession()源码分析
文章目录一、openSession()作用概括二、openSession()源码分析1、用法中2、openSession()3、openSessionFromDataSource()4、获取Executor 执行器1.执行器类型一、openSession()作用概括创建事务创建Excutor把创建好得事务和Excutor交给DefaultSqlSession封装了select | insert | update | delete方法二、openSession()源码分析1、用法中用法中原创 2021-01-26 17:33:28 · 477 阅读 · 1 评论 -
Mybatis源码分析-SqlSessionFactoryBuilder.build()源码分析
文章目录一、SqlSessionFactoryBuilder.build()是干什么的?二、源码分析1.SqlSessionFactoryBuilder源码2.XMLConfigBuilder解析配置文件1、创建好XMLConfigBuilder对象调用.parse()方法2、检查、封装数据3、封装数据封装到哪里呢?4、分别解析到Configuration的哪些属性中呢?一、SqlSessionFactoryBuilder.build()是干什么的?SqlSessionFactoryBuilder.原创 2021-01-25 21:11:31 · 1938 阅读 · 0 评论 -
Mybatis搭建流程
Mybatis搭建流程1、引pom <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.17</version> </dependency> &l原创 2021-01-25 20:27:31 · 264 阅读 · 0 评论 -
IOC单例模式三级缓存解决循环引用(源码分析)
文章目录深度分析SpringBean单例对象创建过程1、doGetBean创建Bean对象2、剖析getSingleton获取缓存对象3、creatBean()->doCreatBean创建对象4、创建对象后通过反射去获取无参构造5、把婴儿对象添加到一级缓存6、给属性赋值7、设置到一级缓存中2、 流程解释2.1文字描述2.2 图解深度分析SpringBean单例对象创建过程1、doGetBean创建Bean对象我们可以看到源码中有个Object sharedInstance = getSin原创 2021-01-24 19:36:43 · 540 阅读 · 0 评论 -
使用递归算法+责任链模拟AOP底层通知调用
系列文章目录SpringAOP实现深入SpringAOP实现流程(源码分析)文章目录系列文章目录一、AOP通知二、模拟AOP通知1、包结构2、interceptor3、invocation4、service5、Test6、运行结果一、AOP通知我们可以先看一个切面类@Component@Aspect//定义切面类@EnableAspectJAutoProxy //开启AOP]public class LogAOP { @Pointcut("execution(* com.s原创 2021-01-24 12:18:11 · 520 阅读 · 0 评论 -
深入SpringAOP实现流程(源码分析)
系列文章目录SpringAOP实现深入SpringAOP实现流程(源码分析文章目录系列文章目录一、SpringAOP实现(源码追踪)1.@EnableAspectJAutoProxy 开启AOP2.底层引用类:@Import(AspectJAutoProxyRegistrar.class)3.registerAspectJAnnotationAutoProxyCreatorIfNecessary(registry)注册切面类4.AnnotationAwareAspectJAutoProxyCrea原创 2021-01-23 21:29:44 · 382 阅读 · 0 评论 -
深度解析Spring-Bean生命周期(源码分析)
系列文章目录提示:阅读这篇文章的时候先提前阅读一下系列文章Spring核心接口Spring-Bean生命周期文章目录系列文章目录前言一、AnnotationConfigApplicationContext是什么?二、refresh()三、Spring-Bean生命周期1.进入refresh方法:2.finishBeanFactoryInitialization(beanFactory)初始化所有单例对象3.beanFactory.preInstantiateSingletons();初始化所有的单原创 2021-01-23 20:35:06 · 319 阅读 · 0 评论 -
Spring-Bean生命周期
文章目录一、SpringBean的生命周期(没有Aware依赖)类似Servlet1、 举例2、流程图二、Spring-bean 真正的生命周期1、举例2、流程图一、SpringBean的生命周期(没有Aware依赖)类似Servlet创建初始化销毁1、 举例要注入的测试类public class Student { private Integer id; private String name; public Student(){ System.原创 2021-01-22 22:04:31 · 337 阅读 · 0 评论 -
Spring核心之我见
一、Spring 核心接口BeanFactoryApplicationContext其中ApplicationContext是BeanFactory的子接口,他们都可以代表Spring容器。Spring容器是生成Bean实例的工厂,并且管理容器中的Bean1、BeanFactory与ApplicationContext区别ApplicationContext 继承BeanFactory实现扩展功能,它提供了更加完整的功能Beanfactory负责读取Bean的被配置文档,管理Be原创 2021-01-22 21:36:25 · 287 阅读 · 1 评论 -
往IOC容器注入对象的那些事er
Spring源码分析篇(一)提到IOC容器大家都不陌生这个容器是什么?到底以什么形式存在,那么我们从今天开始陆续去解开Spring 源码揭开IOC的神秘面纱。首先知其然,我们平常框架中开发怎么去把自己写的类交给IOC容器管理呢?Spring5.0中我们开发时候就很少去写xml配置文件去注入IOC了 ,所以我们直接从常用的来(1)@Bean注入eg:去注入我们的User实体类@Configurationpublic class Config { @Bean//通过Bean去注入容器原创 2021-01-19 19:35:17 · 418 阅读 · 2 评论 -
手写JDK动态代理
先看代码实现然后我们去剖析源码1、还是需要去创建我们需要代理的代理类的接口和实现servicepublic interface OrderService { void test() throws Throwable;}implpublic class OrderServiceImpl implements OrderService { @Override public void test() { System.out.println("【Test】"原创 2021-01-16 22:40:13 · 296 阅读 · 1 评论 -
HashMap源码分析(JDK1.8)
Java8对Java7的HashMap做了哪些改造?数据结构上JDK7: 数组+链表JDK8:数组+链表+红黑树扩容Bug问题JDK7扩容在多线程情况下可能会存在死循环(应为用的头插法)JDK8扩容在多线程情况下已经解决扩容死循环问题(采用尾插法)1.8中为什么要使用,为什么不适用二叉搜索树?二叉搜索树存在几个问题:最大的缺点就是没有平衡值(因为二叉搜索树把第一个节点固定为根节点)这样的话如果第一次添加为0,则就变成了链表这里我们先分析源码,下期会具体详解红黑树是什么?怎么手写原创 2021-01-13 16:46:11 · 265 阅读 · 0 评论 -
关于java1.7中HashMap的问题
1、HashMap的初始默认容量为多少?162、HashMap线程是否安全,与HashTable之间的区别HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。 HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。 HashMap把Hashtable的contains方法去掉了,改成containsval原创 2021-01-12 21:49:18 · 506 阅读 · 0 评论 -
HashMap源码分析(JDK1.7)
HashCode要了解HashMap我们首先需要知道HashCode那么什么是HashCodeHashCode:hashCode是jdk根据对象的地址或者字符串或者数字计算出来的int类型的数值,主要应用于HashMap能够快速查找两个对象的hashCode相同但是对象值不一定相同两个对象使用equals比较那么对象的值一定相同String a="a"integer b =new Integer(97)两者的hashCode相同,但是不是同一个对象HashMapHashMap大家可以原创 2021-01-12 21:20:43 · 302 阅读 · 0 评论 -
JAVA-List集合(源码实现)之我见
一、既然是List集合那么首先我们看一下List接口下边都有哪些?List下有ArrayList,Vector,LinkedList二、源码分析ArrayListRemove源码分析 public E remove(int index) { //1、首先先检查remove的下标是否越界 rangeCheck(index); modCount++; E oldValue = elementData(index); //计算从哪里开始复原创 2021-01-10 20:32:14 · 298 阅读 · 0 评论