- 博客(71)
- 资源 (1)
- 收藏
- 关注
原创 Dubbo SPI组件加载流程源码分析
本文以加载com.alibaba.dubbo.rpc.Protocol SPI组件为例予以分析:核心源码ExtensionLoader extensionLoader = ExtensionLoader .getExtensionLoader(Protocol.class);for (String name : extensionLoader.getSupportedExtensio
2017-06-25 17:13:42 801
原创 Mybatis工作机制源码分析—SqlSessionUtils.getSqlSession工作机制
在调用SqlSessionTemplate进行dao层操作时,其会将工作委托给sqlSessionProxy属性进行,而sqlSessionProxy在进行相关method调用时,用到了JDK动态代理机制,首先SqlSessionUtils.getSqlSession获取sqlSession,本文主要以源码的形式阐述其工作机制。SqlSessionTemplate.SqlSessionInte
2017-05-23 10:48:24 5418
原创 Mybatis工作机制源码分析—缓存机制及事务机制
本文主要以源码分析的角度分析Mybatis的缓存工作机制及事务机制。缓存工作机制整体设计图 网上一张关于Mybatis的缓存工作机制示意图:Cache类结构图相关源码 二级缓存处理主要体现在CachingExecutor;一级缓存处理主要体现在BaseExecutor,其带localCache、localOutputParam
2017-01-15 12:46:49 1014
原创 Mybatis工作机制源码分析—一次select请求处理流程
本文从源码分析的角度分析Mybatis一次select请求处理流程。select整体处理流程时序图DefaultSqlSession.selectOne工作流程时序图DynamicSqlSource构建BoundSql工作流程相关源码/** DefaultSqlSession.java */public T selectOne(String
2017-01-15 11:34:25 1350
原创 Mybatis工作机制源码分析—一次insert请求处理流程
本文从源码分析的角度分析Mybatis一次insert请求处理流程。insert整体处理流程时序图相关源码/** SqlSessionTemplate.java */public int insert(String statement, Object parameter) { return this.sqlSessionProxy.insert(statement, p
2017-01-15 10:35:29 1979 1
原创 Mybatis工作机制源码分析—初始化
本文以Spring集成Mybatis的形式,在启动工程过程中,Spring容器会实例化SqlSessionFactoryBean,来讲解Mybatis是如何进行初始化工作。Spring配置文件applicationContext.xml <beans xmlns="http://www.springframework.org/schema/beans" xmlns:ao
2017-01-05 13:56:46 876
原创 Mybatis工作机制源码分析—初始化—mapper配置文件解析
本文以源码分析的形式讲解Mybatis是如何进行mapper配置文件的解析工作的。时序图相关源码/** XMLMapperBuilder.java */// 构造XMLMapperBuilderpublic XMLMapperBuilder(InputStream inputStream, Configuration configuration, String resour
2017-01-05 13:46:43 1649
原创 Mybatis工作机制源码分析—初始化—config配置文件解析
本文通过源码分析的形式讲解Mybatis config配置文件是如何解析的。时序图相关源码/** XMLConfigBuilder解析 *//** XMLConfigBuilder.java */public Configuration parse() { if (parsed) { throw new BuilderException("Each XMLConfi
2017-01-05 11:54:42 729
原创 Mybatis工作机制源码分析—初始化—sax解析
本文以解析Mybatis config配置文件中"/configuration"元素为例进行说明Mybatis是如何进行sax解析工作的。Mybatis配置文件解析流程图时序图相关源码/** XMLConfigBuilder.java */// 以解析Mybatis config配置文件"/configuration"元素为例说明sax解析机制:parser.e
2017-01-05 11:43:57 829
原创 Struts2框架及其设计模式
Struts2容器 容器是框架的核心,可以利用容器生成bean,也可以完成依赖注入等,这些都是容器的基本功能,Struts2容器与之前介绍的Spring容器、Springmvc容器是大不一样的。Spring典型容器是ClassPathXmlApplicationContext,Springmvc延续Spring的风格,其典型容器是XmlWebApplicationContext
2016-12-28 11:39:05 3468
原创 Struts2工作机制源码分析
Struts2整体工作流程 先通过Struts2官网一张图整体把握其工作流程:初始化初始化调用栈Struts2下的web.xml配置<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/20
2016-12-27 22:16:53 979
原创 Spring AOP工作机制进一步理解(下篇)
前面通过源码,分析了、配置下的spring AOP工作机制,本文分析AutoProxyCreator、ProxyFactoryBean配置下的工作机制。AutoProxyCreatorSpring xml配置文件解析工作流程相关源码生成代理对象AnnotationAwareAspectJAutoProxyCreator对象实例化I
2016-12-02 09:58:59 755
原创 Spring AOP工作机制进一步理解(上篇)
什么是Spring AOP? 详细请见:http://blog.csdn.net/architect0719/article/details/53283763Spring AOP源码分析 Spring可以通过、、AutoProxyCreator、ProxyFactoryBean配置方式实现AOP,下面进行详细分析:解析 Sprin
2016-11-27 12:12:33 1247
原创 Spring createBean过程中BeanPostProcessor的处理机会
Spring IOC在实例化bean的过程中,BeanPostProcessor有机会在bean Instantiation前后、initialize前后进行处理,下面了解下分别做了什么。BeanPostProcessor处理时序图 这里只涉及BeanPostProcessor处理,其他过程忽略:其中,红色步骤为BeanPostProcessor的相关处理。
2016-11-24 21:51:02 2506
原创 Spring依赖注入源码分析
在spring ioc容器启动过程中,xml相关的bean解析为BeanDefinition,注册到BeanFactory中。利用BeanDefinition,进行bean实例化,依赖注入发生在其中。Bean实例化整体流程 整个流程基本在AbstractBeanFactory中完成,这是AbstractBeanFactory的一大核心工作。其中createBean、get
2016-11-21 23:24:46 1009 1
原创 Spring ioc容器启动流程—obtainFreshBeanFactory
本文以XmlWebApplicationContext启动为例说明spring ioc容器启动流程。 obtainFreshBeanFactory的主要工作是创建DefaultListableBeanFactory实例,解析xml配置文件,注册bean。工作流程概览 obtainFreshBeanFactory的主要工作在AbstractRefre
2016-11-09 15:52:05 3065
原创 mybatis与spring集成中SqlSessionFactory创建流程
Mybatis作为优秀且广泛使用的轻量级持久层框架经常与Spring集成一起使用,集成过程中sqlSessionFactory的创建流程是什么样的呢?本文结合mybatis、mybatis-spring源码以及UML时序图的方式阐述如何进行:以下为Mybatis与Spring集成的部分配置,主要是涉及SqlSessionFactory bean:
2016-09-17 22:53:47 3024
原创 JDK容器与并发—Queue—PriorityQueue
概述 基于优先堆的无界优先队列,非线程安全。1)add、offer、remove、poll的时间复杂度为O(log(n));remove(Object)、contains(Object)为线性时间;peek、element、size为固定时间。数据结构 基于数组的平衡二叉堆:// queue[n]元素的两个children为queue[2*n+1]、queu
2016-08-28 10:31:11 1288
原创 JDK容器与并发—Queue—PriorityBlockingQueue
概述 基于优先堆的无界阻塞队列,PriorityQueue的线程安全版本。数据结构 基于数组的平衡二叉堆,在PriorityQueue基础上,增加了一把锁、一个条件:private transient Object[] queue;// 增删查公用的锁private final ReentrantLock lock;// 队列为空时,阻塞take/po
2016-08-28 10:30:28 2158
原创 JDK容器与并发—Queue—DelayQueue
概述 元素为实现Delayed接口的无界阻塞队列。数据结构 基于优先队列,一把锁、一个条件:// 增删查公用的锁private transient final ReentrantLock lock = new ReentrantLock();// 用优先队列存储元素private final PriorityQueue q = new PriorityQ
2016-08-28 10:29:52 868
原创 JDK容器与并发—Queue—ConcurrentLinkedQueue
概述 基于单链表的无界队列,线程安全。1)FIFO;2)wait-free;3)迭代器弱一致性;4)size()非固定时间,由于异步特新,若遍历过程有修改,则可能不正确;批量操作addAll、removeAll、retainAll、containsAll、equals、toArray不保证原子性;5)遵守内存一致性原则;数据结构 基于单链表:
2016-08-28 10:28:24 774
原创 JDK容器与并发—Queue—LinkedTransferQueue
概述 基于单链表的无界传输队列,线程安全。1)FIFO;2)size()非固定时间,由于异步特新,若遍历过程有修改,则可能不正确;批量操作addAll、removeAll、retainAll、containsAll、equals、toArray不保证原子性;3)遵守内存一致性原则。数据结构 基于单链表:// 队列节点// 依赖Unsafe机制最小化
2016-08-28 10:26:28 2065
原创 JDK容器与并发—Queue—SynchronousQueue
概述 无容量的同步队列,即入队线程通过SynchronousQueue将节点传递给出队线程,若暂时无出队线程接收,则一直等待;反之亦然。数据结构构造器// 无参构造public SynchronousQueue() { this(false);}// 带fair构造public SynchronousQueue(boolean fair) { tra
2016-08-28 10:25:37 525
原创 从《MySQL必知必会》中对MySQL的理解
MySQL是一个开源的DBMS,是目前主流的关系型数据库DBMS之一。在《MySQL必知必会》中,作者通过简单实用的订单实例简而明要地介绍了MySQL,这里梳理一下对MySQL的理解。查询单个table中的查询检索+过滤+排序SELECT columnname, ... FROM tablename, ... [
2016-05-02 13:41:19 3590
原创 Spring AOP工作机制
AdvicePointCutAdvisor生成代理类实例: 步骤:1)将ProxyFactoryBean属性interceptorNames对应的bean转化为Advisor,加入到advisors中;2)如果ProxyFactoryBean属性singleton为true,则ProxyFactoryBean
2016-04-25 11:38:10 1151
原创 java代理机制
关于java代理主要涉及到静态代理、动态代理,其中动态代理又有JDK动态代理及CGLIB代理。代理实现静态代理 代理类StaticProxy与被代理类TestImpl实现相同的接口,在StaticProxy内部委托工作给TestImpl实例:public interface TestInterface { void test(); }public class
2016-04-24 17:36:02 1489 1
原创 JDK容器与并发—并发
关于可见性与原子性 在并发操作中,可见性、原子性、有序性都会对并发读写产生影响(注:并发读读、像ConcurrentHashMap那样的不同Segment间的并发写写是不用考虑并发的)。可见性是为了保证线程的工作内存中的数据是最新的,且有变化及时刷新到主内存中。原子性是指在多线程并发中,任何时候都只有一个线程执行一段代码,像volatile i++的操作,即使一个线程最开始拿到最新的
2016-04-20 17:44:09 478
原创 JDK容器与并发—Queue—LinkedBlockingQueue
概述 基于单链表的有界或无界阻塞队列。1)FIFO;2)可用带容量参数的构造函数设置队列的容量,否则为Integer.MAX_VALUE;3)在大部分并发场景中,基于链表的队列比基于数组的队列有更高的吞吐量,但性能的预测性更低。数据结构 单链表,一把take锁,一个take条件,一把put锁,一个put条件:// 链表首节点// head.it
2016-04-20 17:43:47 848
原创 JDK容器与并发—Queue—ArrayBlockingQueue
概述 基于数组的有界阻塞队列。1)FIFO;2)ArrayBlockingQueue是经典的有界缓存的实现,其内是固定大小的数组缓存,生产者向其中插入元素,消费者从其取出元素;3)支持公平锁,默认为非公平锁,公平锁会降低吞吐量但更稳定,避免某个线程阻塞不工作的情况;数据结构 Object数组,逻辑上是环形数组:/** The queued i
2016-04-20 17:43:26 767
原创 JDK容器与并发—Queue—Interface
框架概览接口介绍Queue 俗称队列,其设计目标是存储处理前的元素。在Collection基础上,新增了入队、出队、访问队首元素的方法:1)Queue有两套功能相同的方法:add、remove、element分别为入队、出队、访问队首元素方法的抛出异常版本;offer、poll、peek则为返回特殊值的版本:2)offer在有界队列中常用,当队
2016-04-20 17:42:59 5101
原创 JDK容器与并发—Map—TreeMap
概述 基于红黑树的NavigableMap,非线程安全。1)containsKey、get、put、remove操作的时间复杂度为log(n);2)迭代器fail-fast。数据结构 红黑树:private transient Entry root = null; // 根节点// tree节点static final class Entry im
2016-04-20 17:41:45 954
原创 JDK容器与并发—Map—NavigableMap
框架概览接口说明ConcurrentMapSortedMap 利用key进行排序,采用key的Comparable接口或Comparator进行比较,主要涉及排序的subMap、firstKey、lastKey接口:NavigableMap相对于SortedMap,主要增加了查找节点的方法、删除first、last Entry、获取降序Ma
2016-04-20 17:41:03 547
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人