Java

Understanding Spring

今天在公司做了一个Spring入门的介绍,感觉思路值得总结一下,可能对于以后深入理解类似主题有些帮助。

在多年以前的一个公司,我曾经参与过一段时间的Java企业应用开发,如果没有记错的话,应该是电信工单运维类的项目。我那时还比较青涩,对于Java企业开发以及相关框架和架构都理解的不深。当时组里有个架构师,是他主持了开发的设计决策,应该选的就是Struts/Spring/Hibernate这个经典组合。但是,项目持续的时间并不长,再加之任务繁杂,而我主要负责写前端页面实现,所以对于这些框架开发的精髓也并没有特别深入的了解,有点遗憾。但就是在这个项目,我认识的这位架构师,非常推荐阎宏的书《Java与模式》,所以我听从他的建议买了这本书,我的评价是:如果用Java语言做面向对象设计,这本书到现在依然有较高的阅读价值。

It's complex

事情有点复杂,不知道从哪里说起。因为没什么主题,索性就叫杂感吧。

这段时间又重新学起了Java EE的知识,算作是之前一直没有认真了解的一个代价吧。一个礼拜多的时间看完了Java EE 6 Tutorial,也把有些典型的例子看了看,这次的感觉是原来Java EE还算好,没有想象的沉重,尤其是EJB,新的版本3.1已经算是轻量级的开发技术了。也从网上看了一些评论,主要是Java EE和Spring的比较,如果真的做一个新的企业应用项目,可能还是有点难以取舍。Spring的发展很快,现在已经出到4.0,而Java EE也并不示弱,现在已经有了Java EE 7。从历史上来看,Java EE在较早的版本名声不好,因为过于沉重了,所以Spring顺理成章地赢得了很大的市场,所以现在Java EE想要赢回这场持久战,还真得需要点耐心。一般来说,因为Spring并不受JCP的控制,所以在应用先进思想方面要更敏捷一些,而Java EE涵盖多个JSR的标准更新需要协调各方意见,步调怕是要略显迟缓。另外,Spring集成其他框架的灵活性是Java EE难以比拟的。所以,可能需要考察开发项目的特性,充分了解两种主要框架的能力和缺陷,以作判断。最后一句,Java EE因为包含很多标准来适配企业开发的方方面面,但并不见得在实际的项目都能用到,所以还是要量体裁衣,不要过多的Upfront Design。

Appfuse (2)

书接上文。

Eclipse里编译成功之后,下一个要执行的任务是下载Appfuse的全部源码。按照官网的方法就是一条命令,很简单:mvn appfuse:full-source,但实际的过程往往并不顺利。

首先要注意的是,在下载源码之前不要修改pom.xml,否则可能遇到一些奇怪的问题。

Appfuse (1)

以前也用过Appfuse,不过一直也没怎么深入,最近又有机会玩一玩儿,顺便记录一下。

Appfuse是一个很有意思的项目,可以把它看成是Java企业应用开发的一个最佳实践集合。在Maven的帮助下,可以生成基于Struts,Spring MVC或者Wicket等一些框架的组合,这样就免去了最初搭建脚手架(Scaffolding)的过程。这在Play Framework和Grails出现之前应该算是比较方便的,再加上作者Matt Raible(他的博客地址)本身在Java圈子里也有小有名气,所以这个项目还是有一定人气的。今天看了一下,最新版的Appfuse 3.0已经支持Spring 4和Java 7/Maven 3(最低要求)了,可见人家也是与时俱进的,我们就来尝试一把。

Why Twitter Uses Java

Rails在Web应用快速开发方面几乎很少有框架能与之媲美,但是Rails的性能和系统架构的友好性和Java平台相比可能还是存在一定的劣势。大多数的Web应用,Rails是足能抵挡的,比如现在Github在用Rails,而Twitter以前也主要用Rails。但是Twitter毕竟是一个数一数二的高并发大流量的网站,所以它总会对性能有更高的要求。下面的译文段落来自InfoQ中的一篇访谈,主要是讲Twitter是为什么迁移部分代码和服务到Java平台的。

Gradle 1-2-3

上一篇提到了Gradle,没想到这么快就用上了。Twitter的Scala教程1基本看完之后,就开始看《Scala in Action》2了,作者在书的第二章给出了一个例子:用Scala写一个Http客户端,实现命令模式的REST请求交互,在例子中作者使用了Jetty/Maven构建后台的Java Servlet。我想这是一个学习Gradle的好机会,于是就有了Gradle的1-2-3作为入门篇。

Scala不容小视

春节这几天学习了一下Scala,因为每天时间都非常有限,也就平均1到2个小时的样子,所以只关注了两个资源,一个是Coursera上Scala语言发明者Martin Odersky的Functional Programming Principles in Scala课程,另一个是Typesafe上的电子书Scala for the impatient

Coursera上的课程还是不错的,很正宗、原汁原味,对于深入理解Scala的函数式编程范式非常有帮助,但是后面的一些内容对于应用开发者来说应该是有点难了(呵呵,我自己感受啊),更适用于中高级应用开发或者库开发者,所以在看完了前5周的课程之后,为了能重新巩固基础,我使用了第二个资源,即Scala for the impatient。作为后续的学习计划,当然还是要学完Coursera,然后把课程中推荐的书看一下。