源码
文章平均质量分 86
黄小厮
年年岁岁花相似,岁岁年年人不同
展开
-
mybatis-generator扩展-自定义代码注释
最近在使用mybatis generator自动生成dao代码的时候,发现生成的dao实体类的注释可读性非常差,只会注释对应哪个数据库字段名,我的诉求是生成的javabean的属性注释对应数据库中表字段的comments原创 2017-08-16 22:20:43 · 756 阅读 · 0 评论 -
spring源码扩展点与实战(二)
在上一篇文章《spring源码扩展点》,我们简单的介绍了 spring 的几个常用扩展点,了解了 BeanPostProcessor, BeanFactoryPostProcessor, BeanDefinitionRegistryPostProcessor, ApplicationListener, ApplicationContextInitializer 的作用,接下来主要介绍下在项目中的...原创 2018-02-27 01:32:33 · 1663 阅读 · 6 评论 -
Tomcat8源码分析系列-启动分析(四) webapp
前言上一篇文章中我们分析了 Service、Engine、Host、Pipeline、Valve 组件的启动逻辑,在 HostConfig 中会实例化 StandardContext,并启动 Context 容器,完成 webapp 应用程序的启动,这一块是最贴近我们开发的应用程序。在这一篇文章中,我们将要分析 tomcat 是如何解析并初始化应用程序定义的 Servlet、Filter、L...原创 2018-02-15 14:14:53 · 3306 阅读 · 0 评论 -
Spring类型转换源码分析
前言 本文基于 spring 4.3.13 版本在项目中我们经常使用 spring 提供的 IOC 功能,目前主要有两种方式:xml、注解,而这两种方式的原理是不同的,xml 的注入主要依赖 BeanWrapperImpl 进行属性注入,而注解是依赖 BeanPostProcessor 进行注入。在使用 IOC 功能的时候,经常需要利用 spring 提供的类型转换功能,比如 Str...原创 2018-02-20 17:31:37 · 1748 阅读 · 1 评论 -
spring源码扩展点与实战(一)
前言我们在使用 spring 框架的时候,有时候需要做一些定制化开发,这个时候就有必要对 spring 进行一些个性化扩展。spring 的代码本身就是一门艺术,可以非常方便进行扩展,但是有时候应用场景比较复杂,可能会觉得无从下手,笔者也曾有这样的困惑,因此,本文总结了一些常用的扩展点,希望能起到抛砖引玉的作用,开拓大家的思路。spring 扩展点BeanPostProcess...原创 2018-02-26 00:29:15 · 3186 阅读 · 0 评论 -
Tomcat8源码分析系列-Session源码解析
在 web 开发中,我们经常会用到 Session 来保存会话信息,包括用户信息、权限信息,等等。在这篇文章中,我们将分析 tomcat 容器是如何创建 session、销毁 session,又是如何对 HttpSessionListener 进行事件通知tomcat session 设计分析tomcat session 组件图如下所示,其中 Context 对应一个 webapp 应...原创 2018-03-29 00:29:35 · 2593 阅读 · 7 评论 -
Tomcat8源码分析系列-类加载器
类加载器在分析 tomcat 类加载之前,我们简单的回顾下 java 体系的类加载器启动类加载器(Bootstrap ClassLoader):加载对象是java的核心类库,把一些的 java 类加载到 jvm 中,它并不是我们熟悉的 ClassLoader,而是 jvm 层面由 C/C++ 实现的类加载器,负责加载 $JAVA_HOME/jre/lib 目录下 jvm 指定的类库,它是...原创 2018-04-29 00:45:15 · 2542 阅读 · 3 评论 -
Tomcat8源码分析系列-关于tomcat热加载的一些思考
在前面的文章中,我们分析了 tomcat 类加载器的相关源码,也了解了 tomcat 支持类的热加载,意味着 tomcat 要涉及类的重复卸装/装载过程,这个过程是比较敏感的,一旦处理不当,可能会引起内存泄露卸载类我们知道,class 信息存放在元数据区(1.7是 Perm 区),这一块的内存相比堆而言,只占据非常小的空间,但是如果处理不当,还是有可能会导致内存溢出。这让我回想起几年前的一...原创 2018-05-30 17:13:18 · 1842 阅读 · 0 评论 -
Tomcat8源码分析系列-启动分析(三) Catalina启动
在上一篇文章中,我们分析了tomcat的初始化过程,是由Bootstrap反射调用Catalina的load方法完成tomcat的初始化,包括server.xml的解析、实例化各大组件、初始化组件等逻辑。那么tomcat又是如何启动webapp应用,又是如何加载应用程序的ServletContextListener,以及Servlet呢?我们将在这篇文章进行分析我们先来看下整体的启动逻辑,to...原创 2018-02-02 23:40:01 · 1664 阅读 · 0 评论 -
mybatis拦截器开发-分表插件
相关源码已上传至我的github,对应的插件代码在src/main/java/net/dwade/plugins/mybatis目录 https://github.com/huangxfchn/dwade/tree/master/framework-plugins项目背景 项目中使用oracle数据库 + mybatis框架,由于数据量较大,需要使用日表。而我们又不希望对mybat原创 2017-08-18 16:35:06 · 2005 阅读 · 0 评论 -
spring resteasy单元测试
mock框架在web项目中进行单元测试非常方便,resteasy作为一个优秀的rest框架,也为我们提供了mock测试工具,但是并没有替我们集成spring,因此我们编写的Resource类无法完成bean的注入,进行单元测试时比较麻烦。我们希望像springmvc那样非常方便地进行单元测试(http://blog.csdn.net/dwade_mia/article/details/774516...原创 2017-08-21 20:23:30 · 983 阅读 · 0 评论 -
resteasy自定义参数解析
resteasy源码扩展,支持自定义参数解析原创 2017-08-21 21:58:09 · 1980 阅读 · 0 评论 -
DruidDataSource源码解析
DruidDruid是java语言中最好的数据库连接池之一,经常在项目中使用。本文基于目前最新的版本1.1.6,探索下Druid连接池的实现原理。因为涉及到各种复杂逻辑,暂未想到比较好的图示来描述源码,因此本文更多的是代码+文字,大家见谅哈首先,提出几个问题,我们带着这几个疑问去学习druid连接池源码 - druid常用的参数 - druid如何创建连接的 - connection原创 2017-12-23 01:07:42 · 19293 阅读 · 5 评论 -
Tomcat8源码分析系列-环境搭建
前言为什么要学习tomcat源码?tomcat是目前非常流行的web容器,其性能和稳定性也是非常出色的,学习其框架设计和底层的实现,不管是使用、性能调优,还是应用框架设计方面,肯定会有很大的帮助tomcat版本该系列博客的tomcat版本是8.5.24下载源码从apache官网下载tomcat源码包,本人以8.5.24版本为例,http://tomcat.apa...原创 2018-01-13 14:46:57 · 2863 阅读 · 1 评论 -
Tomcat8源码分析系列-tomcat框架设计
总体架构tomcat的总体架构如下图所示(摘自http://blog.csdn.net/jiaomingliang/article/details/47393141) 如上图所示,tomcat由Server、Service、Engine、Connerctor、Host、Context组件组成,其中带有s的代表在一个tomcat实例上可以存在多个组件,比如Context(s),tomcat...原创 2018-01-13 14:51:06 · 5726 阅读 · 5 评论 -
Tomcat8源码分析系列-启动分析(一) Lifecycle
Lifecycle在其他框架中也很常见,比如spring,它常用于具有生命周期的组件,由Lifecycle控制组件的初始化、启动、销毁等动作,方便应用程序获取、释放某些资源,或者是触发某些特定的事件。Tomcat也是如此,在学习整个启动流程之前,我们先行了解下Lifecycle的实现机制,便于理解整个流程。LifecycleLifecycle接口是一个公用的接口,定义了组件生命周期的一...原创 2018-01-13 14:53:49 · 6597 阅读 · 2 评论 -
Tomcat8源码分析系列-启动分析(二) Catalina初始化
# Bootstrap Tomcat运行是通过Bootstrap的main方法,在开发工具中,我们只需要运行Bootstrap的main方法,便可以启动tomcat进行代码调试和分析。Bootstrap是tomcat的入口,它会完成初始化ClassLoader,实例化Catalina以及load、start动作。在这一篇文章中,我们将会对tomcat初始化过程进行分析。main方法首...原创 2018-01-13 14:57:09 · 2730 阅读 · 0 评论 -
springmvc参数注入源码剖析&源码扩展
项目中使用json传递数据,定义了一套统一的格式,如下所示,但是实际上业务层面只需要处理data节点的数据,sign、signType参数由框架层面进行验签处理。项目中的web层使用了springmvc、resteasy框架,为了方便接收data节点的json数据,笔者扩展了springmvc的源码,添加了自定义的HandlerMethodArgumentResolver。{ "s原创 2017-08-21 15:43:32 · 990 阅读 · 0 评论 -
详解scheduleAtFixedRate与scheduleWithFixedDelay原理
前言前几天,肥佬分享了一篇关于定时器的文章你真的会使用定时器吗?,从使用角度为我们详细地说明了定时器的用法,包括 fixedDelay、fixedRate,为什么会有这样的区别呢?下面我们从源码角度分析下二者的区别与底层原理。jdk 定时器这里不再哆嗦延迟队列、线程池的知识了,请移步下面的链接延迟队列原理,http://cmsblogs.com/?p=2448线程池原理,http://...原创 2019-04-25 11:34:34 · 7273 阅读 · 2 评论