首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

加快Java应用开发速度4——使用模板技术加速项目开发速度

2013-07-04 
加速Java应用开发速度4——使用模板技术加速项目开发速度《加速Java应用开发速度》系列目录:加速Java应用开发

加速Java应用开发速度4——使用模板技术加速项目开发速度

《加速Java应用开发速度》系列目录:

加速Java应用开发速度1——加速spring/hibernate应用调试时启动速度

加速Java应用开发速度2——加速项目调试启动速度

加速Java应用开发速度3——单元/集成测试+CI

加速Java应用开发速度4——使用模板技术加速项目开发速度

加速Java应用开发速度5——使用脚本自动化日常操作?

?

模板,一个我们天天使用的技术, 比如:

Java类就是创建Java对象实例的模板;泛型,参数化类型的模板,如List<User>;常见的如泛型DAO、泛型Service等;Arrays.sort() 一个排序的模板;Spring中的DAO支持设计;可参考《我对SpringDAO层支持的总结》;HttpServlet设计,如service根据http method转发给各个do开头的方法(doGet、doPost等);还有如Struts2的ActionSupport设计,我们继承后能自动得到如国际化、验证的支持;JSP、Velocity、Freemarker等模板页面技术;等等。。

?

模板带给我们的好处很明显:约束+重用。通过模板我们可以把变与不变分离,重用不变,变可以交给子类/通过回调机制完成,而且还具有约束作用,防止乱写代码。

?

那我们应该利用好这个技术,加速项目的开发速度。接下来我们看看如何利用模板技术来加速我们的开发速度。

?

接下来,我将介绍下如何利用模板技术加速开发速度,但不会接受如何利用模板技术开发可复用的代码;本文以IntelliJ IDEA为原型介绍:

1、代码生成

2、Live Template

3、File and code Templates

4、自动代码生成

?

1、代码生成

如我们要求 i + j,可以先:

int k = add(i, j);?

然后按Alt+enter自动生成相关代码;而不是自己去敲;其会自动生成相应的变量和方法体;如图

?

1、按Alt+Enter弹出如创建方法/创建本地变量的提示
加快Java应用开发速度4——使用模板技术加速项目开发速度
?

2、可以根据生成的模板方法,修改模板参数;
加快Java应用开发速度4——使用模板技术加速项目开发速度
?

3、还有典型的如生成构造器、getter/setter等,按Alt+Insert得到如下图:

加快Java应用开发速度4——使用模板技术加速项目开发速度
?

比如在生成构造器时,可以选择相关字段,会自动生成相应的赋值操作:

加快Java应用开发速度4——使用模板技术加速项目开发速度
?

4、Ctrl+O/Alt+Insert生成覆盖方法;ctrl+I/Alt+Insert生成实现方法的

?

5、选中代码后,Ctrl+Alt+T弹出Surround with,生成包围代码的的代码,如if/else:

加快Java应用开发速度4——使用模板技术加速项目开发速度

?

6、在如JSP标签页面中,按Ctrl+Alt+J,生成环绕的标签:


加快Java应用开发速度4——使用模板技术加速项目开发速度
?

等等。。具体可以参考jetbrains.官网的《Generating Code》部分。

?

2、Live Template

如果用过idea,肯定用过如输入 psvm 然后按Tab键,会自动生成public static void main方法,使我们少输入很多字符。这个功能在idea中叫做Live Template;接下来让我们看看有哪些Live Template和如何自定义Live Template。

?

最常见的功能:

1、psvm----->public static void main(String[] args) {}

2、psfi ------->public static final int?

3、ifn ? 会自动生成如下图

加快Java应用开发速度4——使用模板技术加速项目开发速度
……

?

大家可以通过 File--->Settings---->Live Templates找到所有模板,如:

加快Java应用开发速度4——使用模板技术加速项目开发速度
如 lazy 生成延迟初始化的代码,inn生成if (** != null)

?

加快Java应用开发速度4——使用模板技术加速项目开发速度
如fori --->for (int j = 0; j < ; j++) {} ? ?

List list; ?itli ?---->?for (int i = 0; i < list.size(); i++) {?Object o = ?list.get(i);}


加快Java应用开发速度4——使用模板技术加速项目开发速度

加快Java应用开发速度4——使用模板技术加速项目开发速度

? ??

等等,这个可以去Settings里查看。

?

接下来我们看看如何自定义自己的Live Template:


加快Java应用开发速度4——使用模板技术加速项目开发速度
?

1、输入“缩写前缀”,即在代码中输入的前缀;

2、模板文本;

3、Change:选择在哪使用;

?

接下来在Java文件中,输入test会生成 hello world;

?

此处看到 $END$ 这种变量,接下来解释下:

1、格式是$变量名$

2、$END$ : 表示展开模板后光标停留的位置,比如我们的test,生成模板后,光标停留在hello world 前边;

3、$SELECTION$?: 表示对选中的代码应用模板;如我们定义test为:

加快Java应用开发速度4——使用模板技术加速项目开发速度
?


加快Java应用开发速度4——使用模板技术加速项目开发速度

?

此处选中“int i = 1;”,然后按Ctrl+Alt+T 弹出“Surround With” 然后输入test前缀,自动生成:--->hello int i = 1; world?

?

还有如 输入 if for等前缀 按Ctrl+Shift+Enter会自动生成 带()和{} 的形式,非常方便。

?

如果想定义自己的变量,可以直接点击在编写模板时,模板文本右边的:“Edit variables” 编写:如得到返回的变量,方法名,类名等等。

?

大家可以参考官网的《Live Templates》。

?

3、File and code Templates

到此我们使用的都是代码块级别的模板,在工作中我们常见的还需要:

1、生成如Copyright头;

2、生成类头Javadoc,如用户、时间、版本;

3、创建如spring配置文件,每次可能都是从别的地方复制一份;

4、如我们做企业项目时,都先写一个CRUD的DAO、Service、Controller等等,但是几乎每一个模块都是类似的,但是我们每次可能都要重复写一遍;

?

因为IDEA使用的是velocity模板,所以语法相对来说是比较灵活的,而Eclipse看了下是自创的,所以在创建时没有IDEA灵活。

?

File---->Settings--->File and Code Templates 打开模板设置页面

?

3.1、给Class生成Copyright头

1、创建Include文件

加快Java应用开发速度4——使用模板技术加速项目开发速度
1、首先选择Includes标签,然后点击创建创建一个;

2、接着Name处输入名字;

3、Extension部分输入扩展名;

4、文件正文;

此文件包含了我的copyright

?

2、添加到类模板中

加快Java应用开发速度4——使用模板技术加速项目开发速度

1、 首先选中Class;

2、在页面顶部使用 @parse("Coyright.java")把刚才写的文件包含进来

?

接着新建一个Java Class,在页面的顶部会出现这个copyright;

?

3.3、自定义Service模板?

以KeyValueService.java为例。

?

1、首先File--->Settings---->File and Code Templates进入模板设置页面

2、创建模板,如图所示

加快Java应用开发速度4——使用模板技术加速项目开发速度
?
1、点击Templates标签,点击新增按钮

2、Name处输入名字

3、Extension处输入扩展名

4、输入模板正文,此处我们可以使用${NAME}和${PACKAGE_NAME}分别获取输入的文件名和包名

5、语法是velocity语法,所以很强大,按理说很复杂的需求也可以实现

?

3、新增Class

3.1、在包处Alt+Enter弹出新建列表,选择Java ?Class

加快Java应用开发速度4——使用模板技术加速项目开发速度

?

3.2、 接着在弹出的界面中输入 Service的前缀,并选择Service类型:

加快Java应用开发速度4——使用模板技术加速项目开发速度
?

4、接着类就创建好了:

/** * Copyright (c) 2005-2012 https://github.com/zhangkaitao * * Licensed under the Apache License, Version 2.0 (the "License"); */package com.sishuok.es.maintain.keyvalue.service;import com.sishuok.es.common.inject.annotation.BaseComponent;import com.sishuok.es.common.service.BaseService;import com.sishuok.es.maintain.keyvalue.entity.HelloValue;import com.sishuok.es.maintain.keyvalue.repository.HelloRepository;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;/** * <p>User: Zhang Kaitao * <p>Date: 13-6-20 下午4:31 * <p>Version: 1.0 */@Servicepublic class HelloService extends BaseService<Hello, Long> {    @Autowired    @BaseComponent    private HelloRepository helloRepository;}

非常方便。

?

除此之外,我们还可以定义如 jsp模板、html模板、配置文件模板等等,消除开发中的重复工作。

?

但是此种方式的主要缺点就是:一次只能一个文件。比如,我们生成Service时,其实DAO、Contoller等最好也自动生成。 接下来就需要自动代码生成了。

?

4、自动代码生成

估计很多朋友都使用/开发过代码生成器;其实开发一个简单的代码生成器花不了多长时间,核心指导思想是:变与不变分离:

不变的是结构;变的是包名、类名及实体数据。

所以根据这个思想可以很容易写一个代码生成器,可以按照如下步骤完成:

1、自动生成一个模块的DAO、Service、Controller;2、根据数据库自动生成一个模块的Entity、DAO、Service、Controller;3、自动生成一对一、一对多关系的模块代码;4、自动生成公司中常用的代码的模块代码,如树;

目前见到的主要有这些类型的自动代码生成。

?

代码生成的模板文件可以使用纯文本(即纯粹的字符串替换),更高级点的可以使用如velocity这种模板语言,更加强大。

?

如果有朋友不会写代码生成器,可以先建一个Example的示例代码,接着做复制、粘帖、修改实体名等等完成,估计30秒钟也能出一个基本的模块代码。但是如果交给代码生成器,速度更快。

?

比如笔者刚开发的新项目,还没时间开发代码生成器,就写一个一些示例,这样如果写新模块就直接复制一份改改即可,尤其树这块节省不少时间,点击showcase前往查看。

?

?

代码生成器也不是万能的,如果你做过互联网项目,不像企业应用那样有许多的增删改查,所以这个时候,纯粹生成CRUD的代码生成器没有任何意义。

?

?

到此我们介绍完了模板,使用模板能提升不少开发速度,但是模板不是万能的,只有发现有些代码是由:变与不变组成,那我们就可以把不变的做成模板,变的部分通过占位符(即变量)填入。

?

参考资料:

30 Days with IntelliJ IDEA. Quick Popups

IntelliJ IDEA 12.1.0 Web Help

,但是如何识别出现这才是关键。如spring jdbc template就是一个绝好的例子。 ,但是如何识别出现这才是关键。如spring jdbc template就是一个绝好的例子。

说实话,我们今年的项目中我大胆的用了spring jdbctemplate,可惜,被Manager否定了,说着东西有诸多弊端,没怎么花时间去研究这东西,真心不知道怎么样...楼主能说说看吗,关于原生的JDBC和spring jdbctemplate到底有什么差别么... ,但是如何识别出现这才是关键。如spring jdbc template就是一个绝好的例子。

说实话,我们今年的项目中我大胆的用了spring jdbctemplate,可惜,被Manager否定了,说着东西有诸多弊端,没怎么花时间去研究这东西,真心不知道怎么样...楼主能说说看吗,关于原生的JDBC和spring jdbctemplate到底有什么差别么...

原始的就是写代码多,什么都要自己去写;
1、代码冗余
2、映射部分
   给PreparedStatement赋值、取值
   ResultSet取值映射到model
3、事务传播麻烦

jdbc template就是来干:
1、消除冗余代码
2、简化映射
3、得到spring事务管理的好处

spring jdbc template 封装的很薄, 其实可以看出个工具, 上手简单、为嘛不用。


所以直接写jdbc 开发效率慢 而且诸如事务传播等都是很麻烦的。

你可以参考
http://jinnianshilongnian.iteye.com/blog/1685963

你们现在架构是什么样的 9 楼 jorneyR 24 小时前   jinnianshilongnian 写道strivezsh 写道尊好 老是听人说IntelliJ IDEA老厉害了 多厉害? 老厉害 老厉害了....................
撸主终于介绍有多厉害了
其实用好哪个都挺好,不过IntelliJ IDEA毕竟是收费的,做的比较细致

一直在用社区版,免费 10 楼 jinnianshilongnian 23 小时前   jorneyR 写道jinnianshilongnian 写道strivezsh 写道尊好 老是听人说IntelliJ IDEA老厉害了 多厉害? 老厉害 老厉害了....................
撸主终于介绍有多厉害了
其实用好哪个都挺好,不过IntelliJ IDEA毕竟是收费的,做的比较细致

一直在用社区版,免费
我是做JavaEE的,社区版:Java SE、 Google Android

热点排行