自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

井底之蛙

学而知不足,思而得远虑

  • 博客(24)
  • 资源 (5)
  • 问答 (4)
  • 收藏
  • 关注

原创 简单RPC实现之Netty实现

所谓RPC就是远程方法调用(Remote Process Call ),简单的来说就是通过MQ,TCP,HTTP或者自己写的网络协议来传输我要调用对方的什么接口,对方处理之后再把结果返回给我.就这么简单的一个过程。运行时,一次客户机对服务器的RPC调用,其内部操作大致有如下十步:1、调用客户端句柄;执行传送参数2、调用本地系统内核发送网络消息3、消息传送到远程主机4、服务器句柄得到消息并取得参数

2016-10-31 09:52:41 10957 10

原创 简单RPC之Socket实现

最近看到Dubbo大神写得使用Socket实现的简单的RPC调用,对RPC的理解更简单了,然后根据大神的代码自己也重构了一下。RPC Server端代码,主要是使用ServerSocket获得rpc调用客户端发送过来的类信息,方法信息及方法参数信息,通过反射在RPCServer端进行代码执行,最后将执行结果发送给Socket,第一步需要首先执行RPCServer。import java.io.IO

2016-10-28 10:54:47 6062

原创 【Netty源码学习】EventLoopGroup

在上一篇博客【Netty源码解析】入门示例中我们介绍了一个Netty入门的示例代码,接下来的博客我们会分析一下整个demo工程运行过程的运行机制。        无论在Netty应用的客户端还是服务端都首先会初始化EventLoopGroupEventLoopGroup group = new NioEventLoopGroup();

2016-10-27 23:09:32 2371

原创 springMVC源码分析--国际化实现Session和Cookie(二)

上一篇博客 springMVC源码分析--国际化LocaleResolver(一)中我们介绍了springMVC提供的国际化的解决方案,接下来我们根据springMVC提供的解决方案来简单的实现一个多语言的支持。一、基于Session的国际化实现基于Session的国际化实现其实说来也简单,就是在Session中保存语言信息Locale,这样springMVC会从我们提供的多语言配置文件中

2016-10-25 22:07:00 4961 2

原创 Servlet3.0注解@WebInitParam和@WebServlet

在以前的servlet中我们初始化一些参数都是配置在web.xml中的,自从servlet3.0之后给我们提供了注解@WebServlet和@WebInitParam,@WebServlet是用来配置servlet的属性的,@WebInitParam是用来配置一些初始化属性的。@WebServlet和@WebInitParam使用如下:package roseindia.net;im

2016-10-21 15:40:53 15084

原创 springMVC源码分析--国际化LocaleResolver(一)

springMVC给我们提供了国际化支持,简单来说就是设置整个系统的运行语言,然后根据系统的运行语言来展示对应语言的页面,一般我们称之为多语言。springMVC国际化机制就是可以设置整个系统的运行语言,其定义了一个国际化支持接口LocaleResolver,提供的默认实现类如下图。springMVC国际化提供了四个默认实现的类AcceptHeaderLocaleResolver,Fi

2016-10-21 00:10:39 16710

原创 Mybatis3.4.0不支持mybatis-spring1.2.5及以下版本

今天将工程的Mybatis的版本由3.3.0升级到3.4.0导致程序运行错误,使用的mybatis-spring版本是1.2.3,错误内容如下,最后发现是SpringManagedTransaction类中没有getTimeout函数,所以导致这个错误出现。java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringM

2016-10-19 10:05:52 6633 1

原创 SpringMVC源码分析--容器初始化(五)DispatcherServlet

上一篇博客SpringMVC源码分析--容器初始化(四)FrameworkServlet我们已经了解到了SpringMVC容器的初始化,SpringMVC对容器初始化后会进行一系列的其他属性的初始化操作,在SpringMVC初始化完成之后会调用onRefresh(wac)方法,它通过模板方式在子类DispatcherServlet中实现的。onRefresh函数实现如下,其具体的实现就放到in

2016-10-19 00:07:57 2255

原创 【Netty源码学习】入门示例

Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。        也就是说,Netty 是一个基于NIO的客户,服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户,服务端应用。Netty相当简化和流线化了网络应用的编程开发过程,例如,

2016-10-17 15:54:32 4452 4

原创 SpringMVC源码分析--容器初始化(四)FrameworkServlet

在上一篇博客SpringMVC源码分析--容器初始化(三)HttpServletBean我们介绍了HttpServletBean的init函数,其主要作用是初始化了一下SpringMVC配置文件的地址contextConfigLocation的配置属性,然后其调用的子类FrameworkServlet的initServletBean方法。其实FrameworkServlet是springMVC

2016-10-13 20:23:05 6527 4

原创 SpringMVC源码分析--容器初始化(三)HttpServletBean

在上一篇博客 springMVC源码分析--容器初始化(二)DispatcherServlet中,我们队SpringMVC整体生命周期有一个简单的说明,并没有进行详细的源码分析,接下来我们会根据博客中提供的springMVC的生命周期图来详细的对SpringMVC的相关源码进行分析。在上一篇博客中我们了解到,SpringMVC初始化配置是在父类HttpServletBean的init方法中,其

2016-10-13 19:42:32 5187

原创 springMVC源码分析--容器初始化(二)DispatcherServlet

在上一篇博客springMVC源码分析--容器初始化(一)中我们介绍了spring web初始化IOC容器的过程,springMVC作为spring项目中的子项目,其可以和spring web容器很好的兼容。其实现机制就是springMVC也会自己初始化一个IOC容器,然后将spring web的IOC容器作为父容器,这样就可以使用父容器中注入的bean了,由于是向上继承的,所以父容器无法使用

2016-10-13 19:30:44 3058

原创 Hessian源码分析--HessianSkeleton

HessianSkeleton是Hessian的服务端的核心,简单总结来说:HessianSkeleton根据客户端请求的链接,获取到需要执行的接口及实现类,对客户端发送过来的二进制数据进行反序列化,获得需要执行的函数及参数值,然后根据函数和参数值执行具体的函数,接下来对执行的结果进行序列化然后通过连接返回给客户端。接下来我们按照源码一步一步进行分析,在上一篇博客Hessian源码分析--He

2016-10-12 19:34:34 2452

原创 Hessian源码分析--HessianServlet

Hessian可以通过Servlet来对外暴露服务,HessianServlet继承于HttpServlet,但这仅仅是一个外壳,使用web服务器来提供对外的Http请求,在web.xml中我们会进行如下配置,其实就是一个简单的servlet配置,不过是增加了两个属性的配置home-class和home-api,这两个配置其实就是用来调用真正的接口及实现类的: hes

2016-10-12 18:52:28 3376

原创 Hessian源码分析--HessianProxy

在上一篇博客 Hessian源码分析--HessianProxyFactory 中我们了解到,客户端获得的对象其实是HessianProxy生成的目标对象,当调用目标对象的方法时,会调用HessianProxy的invoke方法,如下,当调用HelloService的helloWorld函数时,会调用HessianProxy的invoke函数(对代理机制不懂的同学可以去学习一下)。Hess

2016-10-12 17:01:55 1783

原创 Hessian源码分析--HessianProxyFactory

HessianProxyFactory是HessianProxy的工厂类,其通过HessianProxy来生成代理类。如下面代码:HessianProxyFactory factory = new HessianProxyFactory();HelloService helloService = (HelloService) factory.create(HelloService.cla

2016-10-12 15:40:07 8669

原创 Hessian源码分析--总体架构

Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能。 相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据。        Hessian理解起来也是比较简单的,其主要结构分为客户端和服务端,中间是基于http传输的。客户端主要做的事情就是把对远程接口调用序列化为流,并

2016-10-12 14:36:21 2102

原创 Hessian探究(一)Hessian与springMVC结合

上一篇博客Hessian探究(一)Hessian入门示例我们初步简单的介绍了一下Hessian的使用入门示例,我们是通过Servlet来暴露Hessian的对外服务的,接下来我们介绍一下通过SpringMVC的方式来暴露Hessian的对外调用服务(1)在springMVC的配置文件springmvc-config.xml中进行配置,类似一个普通的Controller,这样我们就可以通过连接来

2016-10-12 13:51:16 2023

原创 Hessian探究(一)Hessian与Spring结合

上一篇博客Hessian探究(一)Hessian入门示例我们初步简单的介绍了一下Hessian的使用入门示例,由于Spring现在使用的实在是太广泛了,接下来我们介绍一下Hessian和Spring一起开发的过程。在上一篇博客中我们是通过如下代码来调用Hessian发布的服务:简单来说就是通过URL进行访问来使用Hessian发布的服务。package com.tianjunwei.hes

2016-10-12 13:41:59 2378

原创 Hessian探究(一)Hessian入门示例

一、hessian的maven信息:[html] view plain copy print?dependency>      groupId>com.cauchogroupId>      artifactId>hessianartifactId>      version>4.0.38version>  dependenc

2016-10-12 13:20:03 2547

原创 springMVC源码分析--容器初始化(一)ContextLoaderListener

在spring Web中,需要初始化IOC容器,用于存放我们注入的各种对象。当tomcat启动时首先会初始化一个web对应的IOC容器,用于初始化和注入各种我们在web运行过程中需要的对象。当tomcat启动的时候是如何初始化IOC容器的,我们先看一下在web.xml中经常看到的配置: contextConfigLocation classpath:applicationContex

2016-10-10 19:12:48 12320 5

转载 Java spi机制浅谈

最近看到公司的一些框架和之前看到的开源的一些框架的一些服务发现和接入都采用了java的spi机制。所以简单的总结下java spi机制的思想。 我们系统里抽象的各个模块,往往有很多不同的实现方案,比如日志模块的方案,xml解析模块、jdbc模块的方案等。面向的对象的设计里,我们一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。一旦代码里涉及具体的实现类,就违反了可拔插的原则,

2016-10-10 15:26:32 4275

原创 Mybatis简单入门

MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。一、表结构准备:DROP TABLE IF EXIST

2016-10-09 12:34:51 995

原创 研磨设计模式之简单工厂模式

定义:提供一个创建对象实例的功能,而无需关心其具体的实现,被创建的实例的类型可以是接口,抽象类,也可以是具体的类。简单工厂的结构:Api:定义客户所需要的功能接口。Impl:具体实现Api的实现类,可能会有多个。Factory:工厂,选择合适的实现类来创建Api接口对象。Client:客户端,通过Factory来获取API接口对象,然后面向API接口编程

2016-10-09 09:18:00 1206

空空如也

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

TA关注的人

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