- 浏览: 1036536 次
- 性别:
- 来自: 成都
最新评论
-
繁星水:
Useful!!
Object-C之(Null)与(Bool) -
pacer123:
请问注解@ApiModelProperty 在哪个jar包下面 ...
Micro Service工具集之Swagger:可测试的样式化API文档 -
sucheng2016:
这东东真的好用么/
对象转换利器之Dozer -
zzq0324:
http://git.oschina.net/zzq0324/ ...
基于Spring-WS的Restful API的集成测试 -
lrz0534:
你好,我在maven上面下载了swagger-springmv ...
Micro Service工具集之Swagger:可测试的样式化API文档
文章列表
Spring 4.0升级小贴士
- 博客分类:
- Java学习
随着Spring4.0的发布,很多同志估计都在考虑升级的事情了吧, 在前一篇(http://ningandjiao.iteye.com/admin/blogs/1993481)中讲了Spring4.0给我们带来的新特性,如果真的非常喜欢的话,接下来就来看看升级注意事项,帮助想升级的同志们估算一下自己在自己的项目中升级到Spring 4.0的成本。
https://github.com/spring-projects/spring-framework/wiki/Migrating-from-earlier-versions-of-the-spring-framework
1. JDK最低版本:J ...
Spring4.0给我们带来什么?
- 博客分类:
- Java学习
JDK8
对JDK8的支持,这个目前来说还是探索性质,毕竟Java 8自己都还没有GA,而且应该没有公司会在目前的情况下使用JDK8做产品开发。因此,暂时可忽略。
Groovy Bean Definition DSL
即可以通过Groovy class来配置Bean,以及Bean之间的相互依赖,即Spring2时代推出的xml配置,Spring3推出的Annotation配置,Spring4为配置方式又增添了一位新成员Groovy DSL。举个栗子:
import org.hibernate.SessionFactory
import org.apache.commons.dbcp. ...
做RESTful开放平台,一方面其API变动越少, 对API调用者越有利;另一方面,没有人可以预测未来,系统在发展的过程中,不可避免的需要添加新的资源,或者修改现有资源。因此,改动升级必不可少,但是,作为平台开发者,你必须有觉悟:一旦你的API开放出去,有人开始用了,你就不能只管自己Happy了,你对平台的任何改动都需要考虑对当前用户的影响。因此,做开放平台,你从第一个API的设计就需要开始API的版本控制策略问题,API的版本控制策略就像是开放平台和平台用户之间的长期协议,其设计的好坏将直接决定用户是否使用该平台,或者说用户在使用之后是否会因为某次版本升级直接弃用该平台。
版本控制策略模式
...
对象转换利器之Dozer
- 博客分类:
- Java学习
在Java的世界中,经常会涉及到需要在2个对象中进行转换,比如说:
调用SOAP Web服务,需要把自己的Domain对象转换为Soap服务的Jaxb对象请求,
在分层级SOA架构中,2个层级之间Domain对象的转换,
在分布式系统中,每个模块使用自 ...
在很多Java企业级应用中,Spring占据了非常重要的位置,这就导致了基本上的技术选型都是围绕着Spring来, 比方说笔者最近的项目需要开发一个Restful的API接口,选型的时候就说,客户架构师直接就拍了spring-ws,原因呢?系统中其他的模块都是用的Spring-ws,保持一致,而且社区活跃,文档丰富,遇到问题易解决。好了,入正题。
既然选定了Spring-WS, 已经TDD入魔的我,首先想到的就是我应该怎么测试这个API接口呢? 作为业界最成熟的框架,Spring为测试其Web应用提供了非常好用的辅助类MockMvc。
首先,在项目的测试代码中加入辅助Spring Web测试 ...
TDD Of Spring JMS
- 博客分类:
- Java学习
不知何时养成了习惯,在没有一个可运行的测试的时候,个人完全没有动力去写实际的业务代码。老觉得,没有测试来证明自己的确做了某件事,即使自己真的完成了某个Task,也心里很没底。
比方说,我想写一个基于JMS的MessageSender, 首先就得想这个MessageSender的功能是什么? 我应该怎么测试这个功能?
功能: MessageSender的作用就是发送一个指定的Message到一个指定的Message Queue中。
测试步骤:
1.创建Message Queue
2.创建Message
3.发送Message到MessageQueue
4.验证Message发送到了Messa ...
Ruby IO之ARGF,ARGV
- 博客分类:
- Ruby学习
在使用ruby脚本时, 经常需要用到在参数中给出文件名,然后再脚本中可以处理该文件的功能,或者说从STDIN获取输入,然后处理得到某个结果。 而ruby为开发者处理类似的问题提供了一个很好的解决方法 --- ARGF
“ARGF is a stream designed for use in scripts that process files given as command-line arguments or passed in via STDIN.”
ARGF
ARGF.each { |line|
puts line
}
上面就是根据参数,找到文件,打印出文件内容所需的全部代 ...
Luhn算法的Ruby实现
- 博客分类:
- Ruby学习
什么是Luhn算法? Wiki上得标准定义:http://en.wikipedia.org/wiki/Luhn_algorithm
Luhn算法最常用的领域是信用卡号码的有效性验证,VISA和MasterCard等巨头都使用了该算法。
Luhn算法的基本原理非常简单:(eg:49927398716)
第一步:把信用卡号倒序(61789372994)
第二步:取出倒序后的奇数位置上的号码, 相加等到总和s1(s1=6+7+9+7+9+4=42)
第三步:取出倒序后的偶数位置上的号码,每个号码乘以2. (eg:2,16,6,4,18)
第四步:把第三步得到的大于10的号码转化为个位+十位。(eg ...
简单对象访问协议(SOAP)是一种轻量的、简单的、基于 XML 的协议,它被设计成在 WEB 上交换结构化的和固化的信息。 SOAP 可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议( HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME)。它还支持从消息系统到远程过程调用(RPC)等大量的应用程序。
本文中得示例是Soap与Http结合的Web service。其实现了一个简单的Echo和Reverse Echo的服务,既请求原文返回和请求倒序返回。就纯技术层面来说,本质上就是post 一个制造xml格式的请求,获得一个xml格式的response的Http ...
在我之前的一篇博文中,介绍了Yammer开发团队贡献的开源微服务开发框架DropWizard(http://ningandjiao.iteye.com/blog/1766498),有了服务之后,开发者最关心的事情是什么呢? 就是有人用你的服务。而开发者使用一个服务之前,首先需要知道的是该服务的API,目前几乎所有的开放平台都是把API以文档的形式放在网站上,如下:
不知道有没有开发人员和我一样,有时对一些API说明的理解比较模糊,总想着能直接验证一下自己的理解就好了,而不是需要去项目写测试代码来验证自己的想法。即API文档应具备直接执行能力。 Swagger就是这样的一个利器,其实,Sw ...
构建iOS持续集成平台
- 博客分类:
- 移动开发
之前写的关于iOS持续集成平台的文章终于在infoQ上发表了,传送门:
自动化构建和依赖管理篇:http://www.infoq.com/cn/articles/build-ios-continuous-integration-platform-part1;
测试框架篇:http://www.infoq.com/cn/articles/build-ios-continuous-integration-platform-part2
CI服务器和自动化部署篇:http://www.infoq.com/cn/articles/build-ios-continuous-integration-pl ...
Object-C的对象模型
- 博客分类:
- 移动开发
在Object-C的类型结构中,有几个比较重要的概念Object(实例),Class(类),Metaclass(元类),Rootclass(根类),Rootclass‘s metaclass(根元类)。有面向对象编程语言背景的同学可以很容易理解类和实例。在Object-C中,Object本质上是一个struct,在这个struct中会保存一个名为isa的指针,该指针会指向该Object的类。如下:
typedef struct objc_object {
Class isa;
} *id;
Object的类中保存了该Object实现的所有方法(即实例方法),另外还有类中还保存 ...
6.函数
函数也是一个对象,可以想所有其他对象一样使用,唯一不同之处在于其可以被调用。
调用一个函数时,会暂停当前函数的运行,把控制权和参数传递给新函数,除了可见的定义时的参数,每个函数还会接收2个附加参数:this和arguments。
调用函数时,不会检查参数类型和个数,如果个数多了,自动忽略多余的,参数少了,补undefined。
方法的调用模式有4种: 方法调用模式,函数调用模式,构造器调用模式,apply调用模式。
方法调用模式:当函数是一个对象的属性时,被称作为对象的方法。以属性存取(‘.’,object[property])的方式调用.
var obj = {
...
刚进公司的时候,经常听到老同事的告诫:DRY(Don't Repeat Yourself),著名的四人帮(GOF)大作《设计模式》的小标题是“Elements Of Reusable Object-Oriented Software”-可复用面向对象软件的基础。可复用可谓程序员写代码的一致追求。那么可以从哪些角度去思考代码复用呢?
变量级别的复用:
这主要涉及的是常量的复用,字符串抽取常量的重构技巧大部分程序员都会使用,但是很多同志往往会忽略多个类之间的常量重复,比方说,某个产品的类别,这在整个系统中都是统一的,这种情况下,使用一个Enum来表示这个类别,或者使用一个统一的常量类来管理所有的常 ...
最近在读《Javascript语言精粹》,把自己觉得重要的和以前不知道的一些知识点记录下来,等看完了,来一篇总结,咱这也算Javascript入门了。
1.注释
单行注释:// 多行注释:/ …/ 建议使用单行注释,因为正则表达式中经常使用'*/',容易出现不可知问题。
2.数字
只有单一数字类型,为64位的浮点数,因此,1和1.0在javascript中是相同的。 指数使用e表示10, NaN表示一个数值,但是该数值不等于任何数值。关于数字的处理,尽量使用Math库函数。
3.在javascript中,下列值会被当做假来处理:
false
null
undefined
空字符串’‘ ...