`
文章列表
随着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 ...
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的版本控制策略就像是开放平台和平台用户之间的长期协议,其设计的好坏将直接决定用户是否使用该平台,或者说用户在使用之后是否会因为某次版本升级直接弃用该平台。 版本控制策略模式 ...
在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

不知何时养成了习惯,在没有一个可运行的测试的时候,个人完全没有动力去写实际的业务代码。老觉得,没有测试来证明自己的确做了某件事,即使自己真的完成了某个Task,也心里很没底。 比方说,我想写一个基于JMS的MessageSender, 首先就得想这个MessageSender的功能是什么? 我应该怎么测试这个功能? 功能: MessageSender的作用就是发送一个指定的Message到一个指定的Message Queue中。 测试步骤: 1.创建Message Queue 2.创建Message 3.发送Message到MessageQueue 4.验证Message发送到了Messa ...
在使用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算法? 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持续集成平台的文章终于在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(实例),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 空字符串’‘ ...
Global site tag (gtag.js) - Google Analytics