BeanPostProcessor解析 Spring为了保证高可扩展性,引入了BeanFactory的后处理机制,主要包括BeanFactoryPostProcessor和BeanPostProcessor。两者的区别是BeanPostProcessor用于改变实际的bean实例,而BeanFactoryPostProcessor则用户实例化bean之前读取配置元数据,并修改它。本文主要通过对ClassPathXmlApplicati...
2. 命名空间及自定义标签的解析 从上一篇文章中可以知道《Spring事务示例与概览》中可以知道<tx:annotation-driven>为整个事务实现的入口。通过对该标签的解析来实现事务的管理。那么,本文就以<tx:annotation-driven>为入口,分析自定义标签的解析流程。1. 自定义标签解析以XmlBeanFactory为例,在初始化BeanFactory对象的时候会解析配置文件中的各...
AbstractQueuedSynchronizer 功能介绍 AbstractQueuedSynchronizer 功能介绍简介队列同步器可重写的方法模板方法队列同步器的实现同步队列独占式同步状态获取与释放共享式同步状态获取与释放简介&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;a
ReentrantLock 源码分析 ReentrantLock 源码分析简介Lock接口提供的功能公平锁和非公平锁公平锁非公平锁公平锁和非公平锁性能对比简介ReentrantLock是Java SE 5新增的jdk层面实现可重入锁的功能, 提供了与synchronized类似的同步功能,只是在使用时需要显示的获取和释放锁。虽然缺少了隐私获取和释放锁的便捷性,但是缺拥有了锁获取和释放的可操作性、可中断的获取锁以及超时获取锁等多种s...
ThreadPoolExecutor源码分析 ThreadPoolExecutor源码分析简介四种拒绝策略线程池的状态提交任务终止线程池(shutdown)立即终止线程池(shutdownNow)简介ExecutorService主要使用线程池中的可用线程执行提交的任务,主要用于解决两个不同的问题:执行大量异步任务时改善性能和管理资源。四种拒绝策略ThreadPoolExecutor.AbortPolicy: 丢弃任务,并抛出Rej...
Semaphore 源码浅析 Semaphore源码分析Semaphore 介绍主要方法介绍关键方法实现代码分析1. acquire()源码分析2. release()源码分析Semaphore 介绍Semaphore是一个计数信号量,Semaphore中保留多个令牌,每一个acquire都会阻塞直到获取一个可用的令牌。每一个release都会归还一个持有的令牌,这也意味着,其他的acquire可以获得该令牌继续执行。但...
CountDownLatch 源码浅析 这里写自定义目录标题简介关键方法方法实现1. CountDownLatch(int count)构造器实现2. await()方法实现3. await(long timeout, TimeUnit unit)方法实现实现逻辑:4. countDown()方法实现简介CountDownLatch提供的是一个计数器倒数的功能。所有调用了await(long timeout, TimeUnit un...
2. mybatis为什么直接调用接口方法就可以实现语句的查询 上一篇文章我们了解了什么是mybatis,并通过一个用例实现了一个简单的mybatis查询数据库的数据,在文章的最后针对mybatis如何实现这些功能提出了几个问题。接下来的文章中会对这些问题做一一解答。本篇文章中解决第一个问题,mybatis为什么调用接口方法就可以实现语句的查询?实现该功能主要分成两块进行:注册Mapper通过new SqlSessionFactoryBuilde...
1. mybatis是什么,提供哪些功能 1. 什么是mybatis官网中给到的定义是这样的:MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据...
启动报错:One or more listeners failed to start. Full details will be found in the appropriate container 启动报错:One or more listeners failed to start. Full details will be found in the appropriate container log file启动时在日志中只看到以上(One or more listeners failed to start. Full details will be found in the appro...
JVM习题--二进制运算 有关补码,简要阐述补码的好处。并计算给出 -99, -105, 205 整数的补码补码有以下两个特点: 因为使用补码可以将符号位和其他位统一处理,同时,减法也可以按加法来处理,即如果是补码表示的数,不管是加减法都直接用加法运算即可实现。两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。补码运算的好处: 使符号位能与有效值部分一起参加运算,从而简化运算规则。从而可以简化运算器
垃圾收集器 垃圾收集器概述: 垃圾收集器是垃圾收集算法的具体实现,垃圾收集算法主要有:标记-清理、复制算法、标记-整理种算法其中,标记清理算法是最基础的算法,其他两种算法都在它的基础上优化得到的。 HotSpot虚拟机的垃圾收集器主要有以下几种(JDK1.7 Update 14之后):连线之间的收集器表示他们可以配合使用。1. Serial收集器(复制算法): seria
垃圾收集算法对比 垃圾收集算法1. 标记-清理算法 标记清理算法是垃圾收集算法中最基础的算法,其他算法都是在他的基础上优化得到的,垃圾收集算法主要分为标记和清除两个阶段,标记即标记中需要回收的对象,标记完成之后对标记的对象做清理操作。该算法有两个不足点:1. 效率不高,标记和清理两个过程的效率都不高; 2. 空间问题,标记清理之后会产生大量的空间碎片,如果需要分配一个连续空间存储大对象,则会提前触发垃圾的回
java对象的回收机制 内容概述:我们知道创建对象是通过new关键字创建的,创建完成后的对象存储在堆内存中,java虚拟机能够完成内存的自动回收,那么JVM是在什么情况下回收对象,如何回收对象?方法区为什么需要回收,它的回收和堆内存的回收又有什么不同?1. java虚拟机在什么情况下回收对象:JVM是通过可达性分析算法判断对象是否存活的,这个算法的基本思想是:通过一系列被称为”GC Roots”的对象作为起点,向下
java内存区域-运行时数据区 概述 java虚拟机在执行java程序的时候会把它所管理的内存分为若干个不同的区域,每个区域有不同的功能、以及创建和销毁时间,有些区域随着虚拟机的启动而存在,有些区域随用户线程的启动和结束创建和销毁。 1. 程序计数器: 程序计数器占用的内存比较小,它是当前线程所执行的字节码的行号指示器,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异
Java虚拟机类加载的过程 1. 类加载的时机:类从被加载到虚拟机内存开始到卸载出内存,整个生命周期包括以下七个阶段,其中加载,验证,准备,初始化,卸载这5个阶段的顺序是确定的。 类在什么情况下进行加载: 虚拟机对类的加载时机并没有明确的规定,是由具体的虚拟机实现的,当时明确规定了,在以下5种情况下(有且只有),类必须进行初始化(加载、验证、准备必须在初始化之前)。这5种方式也被称为主动引用,除此之外的其他引用都不会触发初
泛型及其擦除 1. 什么是泛型,泛型具有什么优点定义:程序编码中包含类型参数的类型,泛型适用于类,接口,方法,主要目的之一是容器持有什么类型的对象,并且有编译器来保证类型的正确性。优点:1. 可重用性,相同功能的但是处理不同类型的数据,可用一份泛型代码完成。换句话说即编写的代码可以被很多不同类型的对象所重用。2. 类型安全:在编译期确保泛型类所接收的实际类型参数是正确的,不不会导致运行期的ClassC
java volatile可见性解析 很长一段时间中对于volatile关键字都是一知半解的,由于工作中用的比较少,也没有对其深入了解,直到看了《深入理解java虚拟机》之后,才有进一步的了解。 volatile是java虚拟机提供的最轻量级的同步机制,只能作用于变来那个,具备两种特性:保证此变量对所有线程的可见性:可见性是指一旦一个线程修改了此变量的值,其他线程能立即得知。禁止指令的重排序(本文暂不涉及)由于vol