- 博客(21)
- 收藏
- 关注
原创 Spring-bean销毁
在bean 创建完成后就会对这个bean 注册一个销毁的Adapter 对象,代码如下:这个DisposableBeanAdapter对象就是负责bean销毁的类。在这个类中收集了该bean是否实现了DisposableBean 接口,是否配置destroy-method 属性,过滤了DestructionAwareBeanPostProcessor 类型的接口。在tomcat 关闭的...
2020-03-20 14:04:18 227
原创 Spring-单例的循环依赖
AbstractApplicationContext.refresh()方法中finishBeanFactoryInitialization(beanFactory)方法,是核心方法。先在缓存中获得实例,调用getSingleton(beanName)方法,缓存中获取不到实例,则调用getSingleton(beanName, () -> {});方法先在一级缓存中拿一级...
2020-03-18 22:07:06 324
原创 Spring-bean实例化过程
BeanDefinitionRegistryPostProcessor调用分为三部分:1.调用实现了PriorityOrdered 排序接口2.调用实现了Ordered 排序接口3.没有实现接口的调用这个接口的理解:获取BeanDefinitionRegistry 对象,获取到这个对象就可以获取这个对象中注册的所有BeanDefinition 对象,所以我们知道了,我们拥有这个对象就可以...
2020-03-17 20:30:03 274
原创 Spring-解析context:component-scan base-package=""
spring.xml中配置注解扫描测试用例AnnotationConfigApplicationContext ,并调用refresh();方法根据解析xml路径,进入解析自定义xml标签,DefaultBeanDefinitionDocumentReader.parseBeanDefinitions()方法中delegate.parseCustomElement(ele);4....
2020-03-17 12:01:31 393
原创 Spring-xml解析源码跟踪
1.新建自己的spring项目,并新建一个test2.ClassPathXmlApplicationContext extends org.springframework.context.support.AbstractXmlApplicationContext,调用父类方法,AbstractXmlApplicationContext中 ClassPathXmlApplicationCont...
2020-03-16 15:17:10 141
原创 Spring-xml解析
类加载路径ApplicationContext applicationContext=new ClassPathXmlApplicationContext(“spring.xml”);步骤:ConfigurableListableBeanFactory beanFactory=obtainFreshBeanFactory();该方法主要进行 解析工作,流程如下:1、创建XmlBeanDe...
2020-03-14 18:05:34 113
原创 Spring-源码导入
1.创建一个新项目2. 重点:源码导入第一步:选择新建项目中spring源码jar右键第二步:找到对应源码包第三步:替换本地源码包找到spring-context/build/libs/spring-context-xx.jar然后把原来的去掉第四步:源文件替换把原来的去掉回代代码中就可以写注释了。打断点后发现对应不上了,需要重新编译spring源...
2020-03-14 17:55:50 179
原创 MYSQL-B+Tree
二分查找二分查找发(binary search)也称为折半查找法,用来查找一组有序的记录数组中的某一记录。其基本思想是:将记录按有序化(递增或递减)排列,在查找过程中采用跳跃方式查找,即先以有序数列的中点位置作为比较对象,如果要找的元素值小于该中点元素,则将待查序列缩小为左半部分,否则为右半部分。通过一比较,将查询区间减小一半。二叉树每个节点之多只有二颗子树:1.二叉树的子树有左右之分,...
2020-03-13 11:56:52 1004
原创 MYSQL-存储引擎
看你的mysql现在已提供什么存储引擎:mysql> show engines;看你的mysql当前默认的存储引擎:mysql> show variables like '%storage_engine%';MyISAMMySql 5.5之前默认的存储引擎MyISAM 存储引擎由MYD和MYI组成MyISAM 表压缩是只读的InnodbMySql 5.5以及以后...
2020-03-13 11:21:23 134
原创 MYSQL-锁
MyISAM中的锁表共享读锁(Table Read Lock)表独占写锁(Table Write Lock)对MyISAM表的读操作,不会阻塞其他用户对同一表的读请求对MyISAM表的读操作,不会阻塞当前session对表读,当对表进行修改会报错一个session使用LOCK TABLE命令给表f加了读锁,这个session可以查询锁定表中的记录,但更新或访问其他表都会提示错误;对...
2020-03-13 10:54:13 103
原创 MYSQL-业务设计
三大范式数据库设计的第一大范式数据库表中的所有字段都只具有单一属性单一属性的列是由基本数据类型所构成的设计出来的表都是简单的二维表数据库设计的第二大范式要求表中只具有一个业务主键,也就是说符合第二范式的表不能存在非主键列只对部分主键的依赖关系数据库设计的第三大范式指每一个非主属性既不部分依赖于也不传递依赖于业务主键,也就是在第二范式的基础上相处了非主键对主键的传递依赖反范式化...
2020-03-13 10:39:27 112
原创 MYSQL-执行计划
执行计划的作用表的读取顺序数据读取操作的操作类型哪些索引可以使用哪些索引被实际使用表之间的引用每张表有多少行被优化器查询一、执行计划-ID三种情况id相同,执行顺序由上至下id不同,如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行id相同又不同,同时存在二、执行计划-select_type三、执行计划-table显示这一行的数据是关于哪张表的四...
2020-03-12 11:55:28 531
原创 JVM-性能调优
内存溢出内存溢出的原因:程序在申请内存时,没有足够的内存空间。内存溢出的几种方式:1.栈溢出:方法死循环递归调用(StackOverflowError)、不断建立线程(OurOfMemoryError)2.堆溢出:不断创建对象,分配对象大于最大对的大小(OurOfMemoryError)3.直接内存:分配的本地内存大小大于JVM的限制4.方法区溢出:在经常动态生产大量Class的应用中...
2020-03-12 11:04:37 206
原创 MYSQL-事务
特性(ACID)原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰...
2020-03-11 11:11:17 117
原创 JVM-双亲委派模型
对于任意一个类,都需要由加载它的类加载器和类本身一同确立其在java虚拟机中的唯一性。启动类加载器:C++语言实现,是虚拟机自身的一部分,另一种就是所有其他类的类加载器,这些加载器由java实现,独立于虚拟机外部,并且全部继承自抽象类java.lang.ClassLoader。扩展类加载器:这个加载器由sun.misc.Launcher$ExtClassLoader实现,它负责加载<...
2020-03-11 10:27:25 146
原创 JVM-类加载
类从被加载到虚拟机内存中开始,到卸载出内存为止,它的生命周期:加载(Loading)、验证(Preparation)、解析(Resolution)、初始化(initialization)、使用(Using)和卸载(Unloading)7个阶段。验证、准备、解析3个部分统称连接(linking)。初始化:虚拟机规定一下5中情况必须立即进行类“初始化”遇到new、getstatic、putst...
2020-03-11 10:19:01 168
原创 JVM-垃圾回收算法与垃圾回收器
判断对象是否存活1.引用计数法给对象一个引用计数器,当对象加一个引用时计数器加1,引用失效减1,引用为0的对象可被回收。优点:快,方便,实现简单缺点:对象相互引用时(A.instance=B同时B.instance=A)很难判断是否该回收2.可达性分析(Java中使用)“GC Roots”向下搜索,走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有...
2020-03-10 19:00:08 326
原创 JVM-对象分配
划分对象两种方式:1.指针碰撞: Java堆内存规整的情况下使用2.空闲列表:Java堆内存不规整的情况下使用JVM中分配对象:本地线程分配缓冲Thread Local Allocation Buffer, TLAB (Eden 1%)栈----堆中预先分配一块很小私有区域。CAS比较和交换,确保原子性问题。对象内存布局在HostSpot虚拟机中,对象在内存中存储布局可以分为3...
2020-03-10 17:59:24 321
原创 JVM-内存结构
jdk-jre-jvm 区别jdk包含jre,jre包含jvmJdk是一个合集,包含一些编译工具Jre是(class)Java运行环境,包含一些插件,包含jvmJvm 是最基础的,做翻译的,class翻译成操作系统上的指令(0101)运行时数据区线程私有:程序计数器、虚拟机栈、本地方法栈线程共享:堆、方法区程序计数器(唯一不会OOM的区域):记录指向当前线程正在执行的字节码指令...
2020-03-10 17:17:57 163
原创 Tomcat-启动源码
Tomcat 本质就是一个servlet容器Tomcat源码目录catalina : 包含所有的servlet容器实现,以及安全、会话、集群、部署管理servlet容器的各个方面,同时,还包含启动入口coyote :Tomcat链接器框架的名称,客户端通过coyote与服务器简历链接、发送请求并接收响应el : 提供Java表达式语言jasper : 模块提供JSP引擎naming...
2020-03-09 19:48:54 250
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人