自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(88)
  • 收藏
  • 关注

原创 Spring源码阅读7-IOC容器-IOC容器相关特性解析

前面我们分析了Bean的创建和依赖注入,在分析的过程中,有一些代码没有在前面的内容中提及到。下面我们会将关键的部分解析下。容器的初始化在Resourse的定位章节中,类AbstractApplicationContext中有如下的代码片段:public void refresh() throws BeansException, IllegalStateException { synchr...

2019-05-16 10:05:40 243 1

原创 Spring源码阅读6-IOC容器-IOC容器的依赖注入

前面我们分析了BeanDefinition的载入和注册过程, 在此过程中,没有对Bean依赖关系的注入。下面我们将分析依赖注入发生的时机。在spring中,依赖注入发生的时机有2种:用户第一次向IOC容器索要Bean的时候配置了Lazy-init属性的Bean将会在初始化的过程中完成依赖的注入。下面我们先分析下第一种情况。首先回想一下,我们如何获取一个Bean? 我想大家都不陌生,可以...

2019-05-16 10:03:07 233

原创 Spring源码阅读5-IOC容器-BeanDefinition的注册

在上一节,我们得到了BeanDefinitionHolder对象,即将Bean的解析和载入完成了,下面将会对这个对象进行注册到容器中。 在前面我们提到过,IOC容器实际上是一个Map, 在这里将得到验证。我们从前面的分析得到,在DefaultBeanDefinitionDocumentReader类中的processBeanDefinition方法中:protected void proces...

2019-05-16 10:00:36 239

原创 Spring源码阅读4-IOC容器-BeanDefinition的载入和解析

在上一节中,我们读源码到Resource的定位部分。 当DefaultResourceLoader返回Resource后,在AbstractBeanDefinitionReader中会对得到的Resource进行读取和解析。 下面是AbstractBeanDefinitionReader中对应的方法:public int loadBeanDefinitions(String location, ...

2019-05-16 09:52:12 270

原创 Spring源码阅读3-IOC容器-BeanDefinition的Resource定位

后续我将会按照一个具体的demo, 一步一步的跟进容器的启动过程。首先构建一个Main, 用于启动容器。public class Main { public static void main(String[]arg){ ApplicationContext applicationContext = new ClassPathXmlApplicationContext("...

2019-05-14 16:46:44 163

原创 Spring源码阅读2-IOC容器-IOC设计整体架构

Spring IOC 容器实现整体概述在Spring中,IOC容器的设计中,主要分为2种具体的表现形式:BeanFactory为代表的容器ApplicationContext为代表的应用上下文容器IOC容器到底是什么?如果用一句话来表述,Ioc容器的底层数据结构,就是一个Map, 保存着各个Bean的定义,然后通过依赖注入等方式将这些Bean管理起来。BeanFactory和App...

2019-05-14 16:45:23 351

原创 Spring源码阅读1-IOC容器-IOC相关概念

IOC相关概念自工作以来,使用Spring已经快3年了,之前主要是关注如何使用Spring,对其内部精致的构建没有涉及或者只有部分的涉及,为了更好的了解Spring的精髓和提高自己的简介,将之前学习Spring的文章和笔记,以及源码的阅读进行整理,形成该系列的文章,以供自己学习和反思。控制反转对于控制反转,我的理解是: 将创建依赖对象的方式交给框架、容器进行管理, 这种现象叫做控制反转。 比...

2019-05-14 16:41:59 171

原创 Tbschedule源码阅读6:对分布式调度系统的思考

虽然把Tbschedule的源码读了一遍,但是如果说让自己来设计一个分布式的调度系统,顿时感觉源码又白读了,我还是不会。那从里面学习到了什么呢?细想一下,能够找出来的东西屈指可数,CopyOnWriteArrayList的用法?Synchroniezed关键字用法又回忆了一次?很显然,这不是我想要的结果。如果仅仅是学习这些简单的东西,完全没必要看这么多复杂的代码。因此,静心下来,回想下自己所学到的...

2018-06-16 15:35:48 342

原创 Tbschedule源码阅读5:TbSchedule任务的执行

终于到了任务执行阶段,当manager(或者在任务恢复/暂停Timer里)调用resume后,会启动执行线程执行任务。根据配置的参数,启动1个或者多个线程去执行线程。具体的流程如下:1.若调度被停止,那么将当前线程移除,若是最后一个线程,还需要注销调度服务(也就是将manager中的processor设置为null),然后直接返回,否则:2.加载需要处理的数据。(从共享数据队列中取出第一个...

2018-06-16 11:45:45 685

原创 Tbschedule源码阅读4:TbSchedule调度机的创建-----任务恢复暂停Timer(PauseOrResumeScheduleTask)

在任务管理线程中,当根据配置计算完成任务第一次执行开始时间和第一次结束开始时间后,将启动任务恢复/暂停调度Timer, 在该timer中主要有以下事情需要做:1.取消调度(this.cancel):启动调度后只能执行一次。2.若为暂停调度 2.1 若暂停调度设置为false,那么执行如下,否则直接返回。(默认为true,若任务执行,该值被设置为false)2.2 设置暂停标志为true...

2018-06-16 11:41:58 223

原创 Tbschedule源码阅读4:TbSchedule调度机的创建-----任务恢复暂停Timer(PauseOrResumeScheduleTask)

在任务管理线程中,当根据配置计算完成任务第一次执行开始时间和第一次结束开始时间后,将启动任务恢复/暂停调度Timer, 在该timer中主要有以下事情需要做:1.取消调度(this.cancel):启动调度后只能执行一次。2.若为暂停调度 2.1 若暂停调度设置为false,那么执行如下,否则直接返回。(默认为true,若任务执行,该值被设置为false)2.2 设置暂停标志为true...

2018-06-16 11:41:56 364

原创 Tbschedule源码阅读3:TbSchedule调度机的创建-----心跳Timer

心跳Timer实在创建调度机的时候(构造函数中)启动的。心跳Timer的主要作用是定时写入调度机的信息,任务分片的重新分配,加载最新任务分片;1.重写调度信息 1.1判断是否被停止调度,若停止,方法直接返回,否则到1.2 1.2发送心跳信息(写入当前调度服务的信息,执行情况),更新成功,直接返回,否则到下一步1.3 更新失败,需要清理当前任务项、执行线程加载的数据(清理内存数...

2018-06-16 11:38:42 468

原创 Tbschedule源码阅读2:TbSchedule调度机的创建-----管理线程组的启动

当管理工厂Timer到达执行时间后,会新启动一个调度ManagerFactoryTImer,调度会根据实时的调度任务和机器信息重新计算每个策略在每个机器上分配的调度管理线程组个数。若当前调度管理器个数不足,那么需要新增。此时则需要创建一个管理线程组。 在创建的时候,构造器中的操作包括:1.将对调度时期用到的参数进行赋值,2. 并清理过期的调度任务; 3. 校验客户端的自己实现的Bean( 很简单...

2018-06-16 11:26:50 391

原创 Tbschedule源码阅读1:Tbschedule调度之初始化---启动

启动这块的内容比较简单,但是是整个调度系统的入口,主要是一些节点的初始化和管理工厂Timer的启动。 在Schedule.xml配置文件中,配置TBScheduleManagerFactory的Bean. 当容器初始化的时候,首先加载一些配置信息,然后开启一个线程(MangerFactory-initalTread)[为什么要开启一个单独的线程?用一个单独的线程来启动,避免启动过长而影响到其他b...

2018-06-16 11:18:58 403

原创 Netty-认识netty

好久没有在博客上写作笔记了,最近公司项目有使用到netty,作为一个之前对netty没有使用过的小白来说,后面我会系统的学习相关的知识,并将项目中用到的技术记录下来,以供学习,后面争取每周发一篇内容。netty是什么对于我个人理解而言,netty就是一个框架,一个网络编程的框架,更加偏激的理解就是一个java的网络编程jar包,能够让我们很方便,快捷,安全,高性能的编写网络程序。# 网络编程

2018-01-14 17:21:23 1029

原创 Mybatis 学习之API

几个重要的类SqlSession取映射器和管理事务, 所有执行语句的方法,提交或回滚事务,还有获取映射器实例SqlSessionFactory获取 一个 SqlSession 实例。 有很多的相关方法创建SqlSession.SqlSessionFactoryBuilderSqlSessionFactory 本 身 是 由 SqlSessionFactoryBuilder 创建的,它可以从 XML

2017-02-25 11:45:55 1044

原创 Mybatis学习三之动态SQL

动态 SQL 元素和使用 JSTL 或其他类似基于 XML 的文本处理器相似。MyBatis 采用功能强大的基于 OGNL 的表达式来消除其他元素。主要有以下几个元素: 1. if 2. choose(when, otherwise) 3. trim(where,set) 4. foreach 由于该部分内容比较简单,很多只是给出了例子。if<select id="findActiveBl

2017-02-21 20:18:24 311

原创 Mybatis学习二之Mapper XML 文件

SQL映射文件SQL 映射文件有很少的几个顶级元素(按照它们应该被定义的顺序):cache – 给定命名空间的缓存配置。 cache-ref – 其他命名空间缓存配置的引用。 resultMap – 是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象。 parameterMap – 已废弃!老式风格的参数映射。内联参数是首选,这个元素可能在将来被移除,这里不会记录。 sql

2017-02-19 21:42:40 437

原创 Mybatis学习笔记

What is MybatisMyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。Mybatis使用流程S

2017-02-13 20:56:46 660

原创 Mybatis学习笔记

What is MybatisMyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。Mybatis的优缺点优

2017-02-13 20:56:15 969

原创 再读Thinking in Java(一)

从学校步入社会已经有半年了,之前在学校的时候,几乎没有写过代码,在面试之前将Thinking in Java读了2次,颇有感触。现在工作了,每天写很多的代码(互联网公司都是这样么?),几乎很少有时间来沉淀知识。所以现在每天上班完成后,再来学习Thinking in Java,相信加上自己的工作经验,一定会有另外的收获。废话不多说了,Let’s beginning.一切都是对象用引用操作那个对象1 声

2017-02-12 22:33:00 846

原创 Guava---缓存

google guava

2016-07-11 16:30:18 1235

原创 测试-TestNG and Mockito

@spy

2016-07-06 20:29:49 4578

原创 Spring Learning Diary

Spring基础

2016-04-27 19:26:08 1068

原创 Java annotation

Java-annotation

2016-04-22 14:26:07 378

原创 HttpServletRequest学习

The function of the object HttpServlet RequestHttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息。这些信息包括 1. 获得客户机信息。(URL,IP、WEB服务器的IP地址(getLocalAddr)等) 2

2016-04-22 11:10:18 537

原创 Java代理-JAVA动态代理,CGLIB动态代理

代理

2016-04-22 10:40:41 409

原创 Velocity笔记

Velocity简介见参

2016-04-19 16:56:32 420

原创 Spring MVC And Java Web Learning Diary

HttpServletRequest介绍HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息。Servlet简介把实现了servlet接口的java程序,称之为ServletServlet生命周期Servlet程序是由WEB服务器调用,web服务器收到客户端的

2016-04-18 16:07:40 802

原创 Maven入门学习

Maven是什么Maven 是一个项目管理和构建自动化工具。是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。 它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生

2016-04-06 16:52:44 476

原创 Dubbo学习

DubboDubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。

2016-04-06 15:33:21 4285

原创 HTML学习1

HTML

2016-01-17 22:23:24 503

转载 C语言内分配

在任何程序设计环境及语言中,内存管理都十分重要。在目前的计算机系统或嵌入式系统中,内存资源仍然是有限的。因此在程序设计中,有效地管理内存资源是程序员首先考虑的问题。第1节主要介绍内存管理基本概念,重点介绍C程序中内存的分配,以及C语言编译后的可执行程序的存储结构和运行结构,同时还介绍了堆空间和栈空间的用途及区别。第2节主要介绍C语言中内存分配及释放函数、函数的功能,以及如何调用这些

2015-09-08 15:48:35 651

原创 我是菜鸟:java数据库操作基本知识

java数据库操作使用JDBC

2015-09-06 19:55:14 589

原创 我是菜鸟:网络知识回顾

TCP知识点回顾TCP建立连接的过程中确定的

2015-09-06 11:32:54 502

原创 我是菜鸟:Executor框架

在Java中,线程工作单元包括callable 和 runnable, 执行机制由Executor框架提供。 在java中,线程被一一映射为本地操作系统线程。当java线程启动时候会创建一个本地的操作系统线程,当java线程终止的时候,这个os线程也会被回收。应用程序通过Executor框架来控制上层的调度,而下层的调度由操作系统内核来控制,下层的调度不受应用程序的控制。 下图是任务的2级调度模

2015-09-06 11:08:41 717

原创 我是菜鸟:ForkJoin框架

ForkJoin框架用于并行执行任务的框架,是把一个大的任务分割成若干个小的任务,最终汇总每个小的任务结果后得到大任务结果的框架。

2015-09-04 10:26:00 355

原创 我是菜鸟:concurrentHashMap实现原理

前段时间虽然已经看过了其,今天再次看的时候,却发现有很多细节竟然完全忘记了,故在此重新记录下,并准备看下源码,加深理解。ConcurrentHashMap的结构ConcurrentHashMap 是由Segment数组结构组成,而每个Segment是由HashEntry数组组成。其中Segment是一个ReentrantLock。对于每个Segment结构和HashMap的结构类似,是一个数组和链表

2015-09-04 09:51:56 454

原创 我是菜鸟:java中同步组件的深入研究

在java中,用于线程同步的有synchronized关键字,Lock等,下面对这些的内部机制原理进行分析总结下。这一节和上一节的同步器紧密关联(AbstractQuenuedSynchronizer)。同步器是构成这些同步组件的基础。重入锁其实在一开始看Java这一块的时候,看的很是迷糊,这个重入锁是什么意思?是重(zhong)入锁还是重(chong)入锁,傻傻分不清。当理解了其含义:其表示该锁支

2015-09-02 17:13:17 628

原创 我是菜鸟:队列同步器

队列同步器是用来构建锁或者其他同步组件的框架,使用了一个int成员变量表示同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作。 子类通过集成同步器并实现它的抽象方法来管理同步状态。同步器是锁的底层实现者。减少上下文切换下面先复习下如何减少上下文切换: 1. 无锁并发编程; 2. CAS算法 3. 使用最少线程 4. 使用协程,在单线程里实现多个任务的调度,并在单线程里维持多个任务

2015-08-26 20:47:57 1405

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除