- 博客(38)
- 资源 (2)
- 收藏
- 关注
原创 【Dubbo系列】扩展点自适应与IOC增强
目录:前言扩展点自适应IOC注入扩展点依赖小结参考前言本文是【Dubbo系列】无处不在的SPI 系列文章的第四小节。【Dubbo系列】无处不在的SPI:崭露头角 主要介绍了JDK的SPI机制,以及ServiceLoader的使用。【Dubbo系列】无处不在的SPI之羽翼渐丰 补充了SPI和API的区别,并对JDK的SPI进行改写,通过ExtensionLoader实现了仅加载所需...
2018-12-20 22:03:54
898
原创 【Dubbo系列】无处不在的SPI之独当一面
本文是Dubbo系列】无处不在的SPI系列文章的第三小节。【Dubbo系列】无处不在的SPI:崭露头角 中主要介绍了JDK的SPI机制,以及ServiceLoader的使用。【Dubbo系列】无处不在的SPI之羽翼渐丰 中补充了SPI和API的区别,并对JDK的SPI进行改写,通过ExtensionLoader实现了仅加载所需要的扩展实现类,达到节约资源的目的。上文文末提到一个问题,如何为不...
2018-12-16 21:45:00
298
原创 【Dubbo系列】无处不在的SPI之羽翼渐丰
【Dubbo系列】无处不在的SPI之崭露头角 一文介绍了JDK的SPI机制。SPI与API的区别主要在于SPI是给扩展者使用的,目的为了扩展组件,其接口通常在调用方中;而API接口通常在实现方中,JAVA documentation中对SPI的解释: 服务通常为接口或者抽象类。服务提供者提供具体的实现。服务提供者可以通过java框架提供的方式或者其他的扩展形式被安装到实现场景中,比如 在扩展...
2018-12-15 21:50:26
286
原创 【Dubbo系列】无处不在的SPI之崭露头角
目录文章目录引言SPI实现小结引言面向接口编程要求我们先根据业务抽象出一个接口,然后根据具体规则建立不同的实现类, 这样一个接口可能会有多个实现类。在具体调用时,就需要指定对应的实现类,当需求发生变化是时,比如新增一个实现或者已有的实现类已经过时,就需要对服务调用端代码进行变更,这就导致了侵入性。举个例子说明一下,比如一项业务需要根据调用者的需求而使用不同的协议进行处理,那么首先建立一个P...
2018-12-13 22:52:08
203
原创 MyBatis拦截器源码深度解析
目录:文章目录一. 建立拦截器链1. 创建对象2. 建立配置文件3. 加载拦截器链二. 方法调用解析1. 对请求对象进行拦截器包装2. 执行调用三. 小结Mybatis拦截器 可以帮助我们在执行sql语句过程中增加插件以实现一些通用的逻辑,比如对查询sql分页、数据权限处理等。允许使用插件拦截的方法调用包括:- Executor (update, query, flushStatement...
2018-12-07 23:48:26
488
原创 Mock框架Mockito入门教程
在开发中,我们经常会依赖同事或者第三方提供的接口,如果该接口无法正常工作:比如接口正在修复,或者网络异常等。那么便会对需要依赖该接口的开发造成很大影响。遇到这种情况,我们可能会想到模拟该接口以提供正常的返回值,用来继续当前的工作。使用Mockito可以帮助我们面对这个问题。Mockito是进行Mock测试的一个框架,使用一个虚拟的Mock对象来模拟现实中比较复杂的对象。基本使用如下:Lin...
2018-12-05 21:03:54
4851
原创 Mybaits之sqlSession生命周期分析
通过 Mybaits 动态代理,我们了解到Mybaits将接口调用通过反射映射到SqlSession中对应的方法。那么SqlSession是如果对相关的操作进行处理呢?跟进Mybaits源码,可以看到SqlSession的一次query执行时序图如下:其中核心成员包括:SqlSessionFactory:SqlSession工厂类,用于生成对应的SqlSession。SqlSessi...
2018-12-02 22:40:35
16291
3
原创 《系统之美》读后感
最近读到《系统之美》,结合现实遇到的一些问题有一些自己的想法。由于现实世界由系统构成的,人们通过语言或者文字表达出来的系统是对现实在某一范围内的描述。存在一些特性,包括(比如适应力,自组织,非线性和调节回路等)以及 一些缺陷比如限制因素有限,具有边界条件限制和有限理性。联想到我们平时学到的知识,知识也是人们通过实践总结出来的用于指导下一次的行为,但是也具有系统的优点,在特定情况下,确实可以解决实...
2018-12-01 12:41:06
5263
原创 mybaits动态代理之最小demo实现
mybaits动态代理之最小demo实现之前介绍jdbc时,我们把sql语句硬编码到代码中实现对数据库的操作(原文链接:一文读懂JDBC),如果实际项目中这样使用会造成维护的复杂性。那么是否可以通过配置的方式来实现呢?mybaits提供了一种动态代理的方式,将sql在xml文件中进行维护,同时建立接口的映射关系,在调用接口中的方法时,通过sqlSession来调用jdbc进行数据库操作。整...
2018-11-24 20:14:43
261
原创 Java API 最佳开发实践
Java API 最佳实践最近在做接口对接的工作,发现要写出一个双方都满意的api并不是一件容易的事,刚好在DZone 上看到微软工程师 Jonathan Giles 写的一篇文章,学到了一些经验,便做了翻译或许可以帮助到更多的开发者。作为一个开发者,我们工作就是每天写代码,当然我们不可以脱离于其他人而写代码。可以确定的是我们都在踩在前人的肩膀上进行学习工作,今天有大量的工具可以供我们使用,...
2018-11-18 22:28:57
10264
原创 JDBC规范与实现 详细解读
JDBC(Java Database Connectivity)背景在开发业务系统时,经常需要对数据进行持久化操作,将数据保存到硬盘中,比如对数据进行新增、查询、更新和删除。这时候就需要使用数据库,通常使用第三方数据库中间件来进行数据操作,应用程序只需要调用数据库中间件提供的api即可。由于市面上有很多数据库,如果提供的api不同,那么应用程序在使用不同的数据库时需要写不同的代码,带来维护的复杂...
2018-11-13 23:02:46
5481
原创 使用Fidder进行接口调试
背景之前做接口开发时,在本地测试没问题的接口,给app端调用就出现问题,需要排查问题的时候,就需要前端同事进行配合,效率很低下,使用Fiddler就可以把移动端的请求转发到pc上,然后可以查看接口的调用情况,同时可以修改request参数把host转发的自己的本地地址,进行debug。具体调用流程如下图:实现步骤:安装Fiddle软件,// TODO设置 工具栏 -> ...
2018-10-26 23:24:45
812
原创 线程池的前世今生
线程池出现的背景我们知道 Thread 的创建、启动以及销毁都是比较耗费系统资源的,比如创建一个线程时,系统需要为该线程创建局部变量表、程序计数器,以及独立的生命周期,过多的线程会占用很多内存,同时过多的线程会导致cpu占用过高,如果线程数量到达一定数目时,cpu仅仅在切换线程上下文就会占很多时间,而不去做别的事情。我们举一个无线创建线程的例子:public class InfiniteTh...
2018-10-24 15:23:09
207
原创 java之正则表达式
正则表达式用于匹配我们希望得到的内容,比如希望知道输入的字符串是否符合某个格式,同时希望得到匹配到的字符串。匹配是否符合正则表达式要求的格式栗子:判断输入字符串是否为’abc’String htmlRegex = "abc";String html = "abc";boolean htmlMatched = html.matches (htmlRegex);System.out.pri...
2018-10-09 23:29:21
160
原创 java必须了解的函数式编程及lambda表达式
什么是函数式编程在介绍函数式编程前,先了解一下平时我们所使用命令式编程,命令式编程是告诉计算机如何一步一步执行编程风格。比如我们要在一个苹果的对象集合中筛选出颜色为红色的苹果集合。我们需要写以下代码:创建存储苹果的集合list遍历这个集合判断苹果颜色是不是为红色,如果满足条件,加入结果集合public static List<Apple> getRedAppleDecl...
2018-10-04 01:40:24
2191
原创 java之rtti(run-time Type identification)类对象
RTTI (run-time Type identification) :为什么要使用rtti:rtti代表java类型信息,从面向对象的角度来说,每一个对象都是一个类,那么类型也是一个类:类型类,其保证不仅在编译期知道java对象的类型,并且可以在运行期 运用对象的类型信息,在jvm中方法区保存class信息,但是类型对象一般存放在堆中 尽管对象使用了java多态中的向上转型,依然可以识别...
2018-09-15 18:20:56
272
原创 java之用故事来理解泛型
大家好,我是一个泛型,我的出现是为了代表不同的参数类型,以减少因为数据类型而对代码造成的束缚,同时使代码更简洁。 比如小明为公司开发一个接口,这个接口可以传入不同的数据类型,那么在我没诞生前,小明需要写多个接口,如下:public interface ICommonGeneric { String get(String a); Integer get(In...
2018-09-08 19:09:00
177
原创 详解aop之interceptor模式
背景我们知道aop是spring的一个重要特性,他的重要提醒是切面增强,可以在一个方法执行前和执行后增加一些额外的功能,比如执行前进行权限验证,执行后进行方法执行时间统计等。当然可以在一个方法上添加多个拦截,这时候我们可以把拦截器存放在一个list中,在方法执行前,依次执行拦截器的前置增强-执行方法-后置增强。 对具体方法增强时,静态代理无法实现通用性,所以需要需要用到动态代理技术,也就是...
2018-08-28 12:37:22
1317
1
原创 quartz源码分析系列一
为什么需要quartzquartz是一个调度框架,支持简单调度和定时调度。支持多任务持久化处理。特性一:多任务触发处理解决的问题:通常我们进行一个任务调度,会对一系列条件进行判断,比如一个定时执行的任务需要在每天12点进行执行,手动执行程序的话可以进行while循环用来判断当前时间是否到达指定的时间,当条件满足时执行任务。如果有多个程序需要执行,我们就需要开启多个线程进行轮...
2018-08-25 22:22:37
3374
3
原创 java实现 二维码生成 并 添加 附加信息
需求说明 在一些场景中,需要在二维码底部添加一些相关的信息,例如二维码表示一个设备时,下方显示该设备的位置信息 实现方式 首先,根据需求的长和宽生成一个BufferedImage/** * 描述:建立布景并设置背景色 * @author renpengfei * @since JDK 1.8 */ ...
2018-02-24 13:46:04
3313
原创 junit测试restful接口
开发过程中,有时需要对接口进行小步迭代测试。这时候可以使用junit mockmvc来对controller进行测试,这样即使接口在后期需要修改时,可以快速进行测试。首先上一个例子:@RunWith(SpringRunner.class)@SpringBootTest@AutoConfigureMockMvcpublic class IndexControllerTest {...
2018-02-14 12:25:05
3541
原创 使用idea插件jrebel提高开发效率
目前进行中的一个项目作为公司平台下的子项目,采用maven进行管理,同时依赖已有多个项目中的jar包,并调用多个微服务,开发时,只要多其中的依赖进行一处改动,则需要重新进行打包。后来采用jrebel,在jar包修改时build一下相关的文件即可进行热部署,大量提高了开发效率。 安装过程如下,idea安装插件 pom文件中引入pluginplugin>
2018-01-28 17:53:48
604
原创 Java调用机制详解
Java调用分为3种:同步调用,同步回调,异步回调1.同步调用及平时常用的调用方式 2.回调在框架中使用较多,例如spring 的 AOP实现,servlet的拦截器实现 场景 老师布置完作业后提供一个回调方法,学生可以通过这个方法把执行情况汇报给自己的老师。 (回调使用的重点,不同的老师实现相同的回调接口,但是会有不同的实现,因此学生可以选择自己老师来进行汇报,这也是AOP通过反射调用相关方
2017-01-20 10:47:13
419
原创 Java 文件上传 以及 springmvc实现文件上传
第一种方式 自定义servlet实现文件上传和下载(基本还是以字节流进行文件上传下载) http://www.cnblogs.com/xdp-gacl/p/4200090.html引入commons-io包<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <ver
2017-01-09 23:58:37
6712
原创 linux 配置 tomcat
创建app目录;cd / mkdir app 到官网下载tomcat7,http://apache.dataguru.cn/tomcat/tomcat-7/v7.0.55/bin/apache-tomcat-7.0.55.tar.gz用SecureFx将apache-tomcat-7.0.55.tar.gz上传到目录/app;解压缩;cd /app tar -xzvf apache-tomca
2016-09-06 20:56:52
320
原创 windows下安装DUBBO-admin管控台
想在windows下查看dubbo服务的状态,在网上看到不少相关的资料,但是总有一些地方出问题,现在将自己经过测试可以正常使用的配置的过程写下来 1,解压zookeeper-3.3.6到D盘 2.复制D:\zookeeper-3.3.6\conf中的zoo_sample.cfg名字为zoo.cfg,并修改其内容 The number of milliseconds of each tick 心
2016-08-20 18:49:33
564
原创 使用ajax与Gson实现登录验证
web项目中经常使用ajax实现页面数据交互,同时结合Gson实现json与bean的转换,以下以一个登录模块来熟悉相关技术。 使用maven搭建工程 1.引入Gson<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.3</version>
2016-08-17 21:44:57
1219
转载 cookie 和session 的区别详解
这些都是基础知识,不过有必要做深入了解。先简单介绍一下。二者的定义:当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择,都纪录下来。当下次你再光临同一个网站,WEB 服务器会先看看有没有它上次留下的 Cookie 资料,有的话,就会依据 Cookie里的内容来判断使用者,送出特定的网页内容给你。 Cookie 的使用很普遍,许多有
2016-08-16 23:20:32
324
原创 Java注释中文乱码问题
当我们打开一个项目时,经常会遇到中文乱码的问题, 如图中/** * ����ԱϵͳController�� * @author Administrator * */@Controller@RequestMapping("/admin/system")public class SystemAdminController {这时我们要查看编译器中文件的编码格式是否与源码对应,一般文件常用
2016-08-14 21:28:51
16430
原创 基于SSM架构的博客系统登录问题
业余时间搭建了一个基于SSM架构的博客系统,在后台登陆时使用 使用redirect方法subject.login(token); // 登录验证 return "redirect:/admin/main.jsp";经常会出现与xml配置不符合的报错, 经尝试使用返回ModelAndView的方式跳转到指定页面,可以避免出现错误~ @RequestMapping("/lo
2016-08-14 18:03:10
2268
转载 理解HTTP幂等性
Todd.log - a place to keep my thoughts on programming 理解HTTP幂等性基于HTTP协议的Web API是时下最为流行的一种分布式服务提供方式。无论是在大型互联网应用还是企业级架构中,我们都见到了越来越多的SOA或RESTful的Web API。为什么Web API如此流行呢?我认为很大程度上应归功于简单有效的HTTP协议。HTTP协议是一种分
2016-08-10 22:41:04
268
原创 jsp通过url传递参数乱码
今天调试后台代码时,通过jsp页面传递查询字段给dao层var userName = $("#userName").val(); if(null != userName && ''!=userName){ url=url+"&userName="+userName; }发现当参数出现中文时,查询结果为零,经过调试,发现传递的参数在进contro
2016-08-04 20:29:50
326
转载 centos安装samba
近期研究分布式架构,项目需要安装多态虚拟机,因此需要安装samba实现各系统之间文件交互,尝试了很多方法,最终按照下面的方法一次成功。关于Samba,大家有没有这种感觉,弄了N久丫的死活不喘气儿。找来各种“哥”和“姐”,发现全是“详解…配置专题”,看了半天不知道别个在说什么,好不容易找了个简单的教程,从头到尾跟着做,尼玛,浪费时间精力不说,就是跑不起来。是不是有种吐血的生理反应了。唉,不会写文档的娃
2016-07-20 17:33:33
365
原创 从事技术开发以来的一些个人经验
自从入了互联网开发这个行当以来,遇到很多问题,趟过的了很多坑,总结了一个相对高效的学习方法,写出来分享一下吧。一般来说,每一种方法都有其适应的场景,我把学习技术大致分为两个场景: 1.不需要逻辑的知识点。这部分通过看视频可以非常快速的了解其应用,比如一些常见的框架应用。 2.需要经过思考其实现逻辑的内容。比如设计模式,mvc实现等,这部分通过看书然后自己动手实现是比较快速掌握的手段,想通过看视频
2016-07-19 23:45:42
469
原创 maven依赖的项目报错Could not resolve dependencies for project
maven依赖的项目报错Could not resolve dependencies for project问题 maven如果依赖本地项目 如图,myservice依赖了myinterface, 1 则首先将myinterface 执行clean , packageResults :Tests run: 0, Failures: 0, Errors: 0, Skipped: 0[INFO
2016-07-18 13:45:59
88088
5
原创 maven打包错误: -source 1.5 中不支持 diamond 运算符以及@Override is not allowed when implementing interface method
maven打包时经常遇到这两个问题,尤其在重构项目时,解决方案如下: File–>Project Structure…–>Module–>选中模型–>Language Level,如图:
2016-07-17 22:38:44
516
原创 dubbo+zookeeper服务器配置
由于公司项目用到duboo,因此自己搭建了一套服务器环境测试一下,以下是服务器zookeeper的配置过程linux安装zookeeper 1.安装前准备活动: 安装zookeeper前需要安装jdk,见附录 查看服务器ip linux下输入ifconfig,查到本机IP为192.168.37.128 注册中心服务器(192.168.37.128 )配置,安装 Zookeeper: 修
2016-07-17 15:47:11
627
转载 Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl
2016-07-16 15:02:28
355
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人