`
jinnianshilongnian
  • 浏览: 21504535 次
  • 性别: Icon_minigender_1
博客专栏
5c8dac6a-21dc-3466-8abb-057664ab39c7
跟我学spring3
浏览量:2418728
D659df3e-4ad7-3b12-8b9a-1e94abd75ac3
Spring杂谈
浏览量:3008887
43989fe4-8b6b-3109-aaec-379d27dd4090
跟开涛学SpringMVC...
浏览量:5639531
1df97887-a9e1-3328-b6da-091f51f886a1
Servlet3.1规范翻...
浏览量:259947
4f347843-a078-36c1-977f-797c7fc123fc
springmvc杂谈
浏览量:1597373
22722232-95c1-34f2-b8e1-d059493d3d98
hibernate杂谈
浏览量:250235
45b32b6f-7468-3077-be40-00a5853c9a48
跟我学Shiro
浏览量:5859012
Group-logo
跟我学Nginx+Lua开...
浏览量:702030
5041f67a-12b2-30ba-814d-b55f466529d5
亿级流量网站架构核心技术
浏览量:785238
社区版块
存档分类
最新评论

加速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弹出如创建方法/创建本地变量的提示

 

2、可以根据生成的模板方法,修改模板参数;

 

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


 

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


 

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

 

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

 

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



 

等等。。具体可以参考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   会自动生成如下图


……

 

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


如 lazy 生成延迟初始化的代码,inn生成if (** != null)

 


如fori --->for (int j = 0; j < ; j++) {}    

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




    

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

 

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



 

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

2、模板文本;

3、Change:选择在哪使用;

 

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

 

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

1、格式是$变量名$

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

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


 


 

此处选中“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文件


1、首先选择Includes标签,然后点击创建创建一个;

2、接着Name处输入名字;

3、Extension部分输入扩展名;

4、文件正文;

此文件包含了我的copyright

 

2、添加到类模板中

1、 首先选中Class;

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

 

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

 

3.3、自定义Service模板 

KeyValueService.java为例。

 

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

2、创建模板,如图所示


 
1、点击Templates标签,点击新增按钮

2、Name处输入名字

3、Extension处输入扩展名

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

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

 

3、新增Class

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

 

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


 

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
 */
@Service
public 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

12
2
分享到:
评论
2 楼 jinnianshilongnian 2013-06-28  
满手都是炸 写道
又是一个系列哇,楼主加油
不变的做成模板,变的部分用变量表示。
物理意义上的  变与不变很容易理解,逻辑上的就不太那么容易明白了,只能具体情况具体看待了,

是的,这个要自己识别,我们天天在用模板这玩意  ,但是如何识别出现这才是关键。如spring jdbc template就是一个绝好的例子。
1 楼 满手都是炸 2013-06-28  
又是一个系列哇,楼主加油
不变的做成模板,变的部分用变量表示。
物理意义上的  变与不变很容易理解,逻辑上的就不太那么容易明白了,只能具体情况具体看待了,

相关推荐

    Java开题报告(模板)

    Java开题报告(模板)主要关注的是Java编程中的...总的来说,Java的国际化是全球化背景下软件开发的重要课题,通过深入研究和实践,我们可以提升Java应用程序的全球适用性,进一步推动Java技术在全球范围内的广泛应用。

    机器人问答,基于java开发的aiml机器人DEMO,支持中文,附送文档

    "根据网上aiml机器人开发的资料,整合的一个问答机器人demo,已解决中文支持问题,基于java开发,并附送2个文档" —— 描述进一步解释了项目的来源和特点。开发者参考了网上的AIML机器人开发资源,创建了一个具有...

    使用 AppFuse 快速构建 java

    特别是在Java领域,有许多工具可以帮助开发者提高效率,其中AppFuse就是一个强大的开源框架,旨在加速Java应用的开发过程。本文将详细介绍如何利用App Fuse来快速构建J2EE项目,并通过一个具体的例子——一个简单的...

    java毕业设计开题报告

    【Java毕业设计开题报告——单车道公路...总之,本项目通过Java毕业设计,将深入探讨交通模拟仿真技术,构建一个实用的单车道公路桥交通模拟系统,有助于提升交通管理的智能化水平,具有较高的学术价值和实际应用前景。

    中控指纹仪驱动及开发包demo(C/S模式)

    《中控指纹仪驱动及开发包在Linux下的应用详解》 在信息技术领域,生物识别技术以其独特的安全性与便捷性在身份...因此,掌握这款开发包的使用,对于提升项目开发效率,以及在生物识别领域深化技术应用具有重要意义。

    java Smart系统-题库及试卷管理模块的设计与开发(源代码+论文).rar

    《Java Smart系统——题库及试卷管理模块的设计与开发》 在信息技术日益发达的今天,教育领域的信息化进程也在不断加速。Java Smart系统是基于Java语言开发的一款高效、易用的题库及试卷管理软件,旨在为教育机构和...

    hbmtemplates模板-201009201535

    在IT行业中,模板是一种非常重要的工具,特别是在软件开发、网页设计和文档编写等领域。"hbmtemplates-201009201535"这个标题和...在实际应用中,正确使用这些模板能够极大地优化开发流程,使项目更易于管理和扩展。

    安卓Android源码——NameCardRec.zip

    3. **Android应用开发**:NameCardRec可能是一个Android应用,开发者需要了解Java或Kotlin语言,Android SDK,以及Android Studio等开发工具。 4. **Android权限管理**:处理摄像头输入和读取联系人信息需要相应的...

    java课程设计报告-俄罗斯方块游戏开发.doc

    - **线程控制**:使用Java多线程技术控制俄罗斯方块的自动下落速度,并实现游戏逻辑的循环执行。 - **键盘监听**:通过监听键盘事件,实现俄罗斯方块的移动、旋转和加速下落。 - **分数计算**:根据消除的行数计算得分...

    cuba企业级应用快速开发框架 v7.2.15.zip

    CUBA( Comprehensive UI and Business Application Platform)是一个高效的企业级应用开发框架,旨在加速和简化后端业务系统和前端用户界面的构建。标题中的“cuba企业级应用快速开发框架 v7.2.15.zip”表明我们...

    IBMLotusDomino与BlackBerry应用程序

    - 适用于需要高级定制和特定功能的应用开发。 #### 三、应用举例:论坛模板 本节将通过一个具体的例子——论坛模板,来详细介绍如何实际操作开发与Domino数据库交互的BlackBerry应用。 - **窗体设计**: - 论坛...

    1Android开发环境搭建.pptx

    Android开发环境搭建是每个想要踏入Android应用开发领域的程序员必须经历的第一步。首先,我们需要了解Android的基本体系结构。Android系统由操作系统内核、中间件层和应用程序框架以及各种应用程序构成,这是一个...

    bootstrap模板

    Bootstrap模板是一种基于HTML、CSS和JavaScript的开源框架,由Twitter公司于2011年推出,旨在加速web应用开发过程。这个框架提供了丰富的预设样式、组件和JavaScript插件,使得开发者可以快速创建响应式、移动设备...

    SYBASE公司新一代移动开发平台SUP 产品介绍

    开发者可以通过直观的图形化界面设计应用界面,也可以使用Java、JavaScript等编程语言进行定制化开发。此外,预定义的业务逻辑模板和API库加速了应用的构建过程,使得非专业程序员也能快速上手。 **4. 应用生命周期...

    JSP网站模板真正实现自已架设网站

    "JSP网站模板"则是一种预设计的网页布局和样式,用于简化和加速网站开发过程。这个压缩包文件提供了一个方便的起点,帮助用户快速搭建自己的网站。 首先,我们来看看"说明.htm",这通常是一份详细指导文档,解释...

    北大青鸟S1 结业项目MyKtv

    【北大青鸟S1 结业项目MyKtv】是一个典型的IT教育机构——北大青鸟的学员在S1阶段完成的综合性编程项目。这个项目旨在帮助学员掌握基础的软件开发技能,特别是针对Web应用的开发。通过参与这个项目,学员能够实践...

    java 小游戏 俄罗斯方块

    在这个项目中,我们将深入探讨如何使用Java来实现经典的小游戏——俄罗斯方块。这个小游戏是基于Java编程实现的,能够正常运行,为玩家提供了一个熟悉的休闲体验。 1. Java基础与Swing框架 在构建俄罗斯方块游戏时...

    Velocity中文指南

    Velocity是一款基于Java的模板引擎,它的设计初衷是为了简化Web页面设计者和内容提供者的工作流程,通过其简单而强大的脚本语言——Velocity Template Language (VTL),实现了动态内容与静态模板的无缝融合。...

    android_environment.zip_android_安卓配置环境

    在进入Android应用开发的世界之前,首要的任务是搭建一个完整的Android开发环境。这个"android_environment.zip"文件正是为了帮助初学者快速、顺利地完成这一过程。本文将详细解析这个压缩包内的"android环境配置....

    Eclipse权威开发指南2.pdf

    第3章 使用Java开发工具 63 3.1 JDT入门...... 64 3.1.1 JDT用户界面概述..... 64 3.1.2 JDT基础..... 65 3.1.3 使用JDT视图..... 68 3.1.4 搜索..... 69 3.2 编写Java代码...... 71 3.2.1 Java编辑器概述..... 71 ...

Global site tag (gtag.js) - Google Analytics