有效的Eclipse:定制模板


正如我试图避免代码中的冗余一样,我也试图避免写作中的冗余。我很懒,模板为我写的东西最多。Eclipse与预定义的模板捆绑在一起,但是它们太通用了,而且并不是所有的模板都太有用。真正的力量在于定制模板。在本文中,我将向您展示如何创建它们,并列出一些有用的灵感。

什么是模板

顾名思义,模板是带有已定义占位符的小代码。简单模板的一个例子是

System.out.println(${text});

每个模板都有一个名称,作为模板本身的快捷方式。你输入名字,按CTRL +空格它将会扩大。

我们的第一个模板将扩展到

[img _ assist | NID = 1424 | title = | desc = |链接=无|对齐=中间|宽度= 186 |高度=19]

我不会在这里解释这一切意味着什么,我已经在my previous post on templates。现在重要的是${text}占位符(变量)突出显示,可以立即编辑。

在更复杂的模板中可以充分看到模板的真正力量。第一个优点在于,你可以有多个同名的变量。我们的第二个模板将有更多的变量:

int ${increment} = ${value};
y = ${increment} + ${increment};

并将扩展到

[img _ assist | NID = 1428 | title = | desc = |链接=无|对齐=中间|宽度= 204 |高度=45]

当您现在开始键入时,增量变量的所有出现都将被更改。然后,您可以通过按切换到下一个变量标签钥匙。最后,你可以拥有

[img _ assist | NID = 1425 | title = | desc = |链接=无|对齐=中间|宽度= 110 |高度=43]

只需三次按键——一次用于i,一个给标签一个给2

为了使它更好,模板系统提供了预定义的变量,这些变量将根据它们的上下文进行扩展。我不会列出它们,你可以在插入变量按钮下找到它们。

[img _ assist | NID = 1426 | title = | desc = | link = popup | align = middle | width = 640 | height = 274]

请注意,您不仅获得了一个列表,还获得了一个描述和一个用法示例。

为了清楚起见,我将举例说明一个内置变量--$ {封闭类型}。当这个扩展时,你会得到一个类(或者接口,枚举)的名字,你的模板就是在这个名字中被扩展的。

“但是我怎么用它呢?”,我听到你在问。我准备了几个模板只是为了给你灵感,我相信读完这篇文章后你会发现成千上万的其他模板,我相信你会创建它们并与我们分享。

自定义模板

打开窗口->首选项和类型模板进入搜索框。


[img _ assist | NID = 1427 | title = | desc = | link = popup | align = middle | width = 640 | height = 578]

您将获得所有编辑器的列表,以及它们各自的模板设置。这是因为模板与编辑器紧密相关——你会在不同的编辑器中得到不同的内置变量。另外请注意,你的列表可能与我的列表不同,这取决于安装的插件。

现在您必须决定您想要创建的模板类型。如果它是一个适用于类、接口和枚举的Java模板,那么选择Java ->编辑器->模板。如果您创建了一个Java模板,您将不能在XML编辑器中使用它,这是意料之中的。

所以点击新的按钮,以获得一个对话框。它在这里,光彩夺目:


[img _ assist | NID = 1430 | title = | desc = | link = popup | align = middle | width = 640 | height = 316]

姓名是模板的名称。好好选择它,因为它会成为你的模板的捷径。输入模板的名称(或至少几个字符)后,点击CTRL+空格它将被扩展。

描述当模板名称不明确时,您会在模板名称旁边看到。


[img _ assist | NID = 1433 | title = | desc = |链接=无|对齐=中间|宽度= 415 |高度=296]

模式是模板主体。还有语境?这在每个编辑器中都有所不同。如果您查看Java模板中的组合框,您将会看到Java和Javadoc。这是一个简单的上下文,在相应的编辑器中,模板是适用的。

支票自动插入如果在没有其他匹配模板可用时,希望模板在ctrl-space上自动展开。通常最好不要勾选复选框,否则你会得到一个模板建议“弹出”。查看当我在sysout模板上取消选中它时会发生什么。


[img _ assist | NID = 1432 | title = | desc = |链接=无|对齐=中间|宽度= 256 |高度=46]

如果我选中它,它会自动展开,因为没有其他模板匹配sysout*模式。

我的名单

这是我承诺的清单。我已经分类了。

JavaJava->编辑器->模板
  • 记录器-创建新的记录器
    private static final Logger logger = Logger.getLogger(${enclosing_type}.class.getName());
    请注意${enclosing_type}变量的用法。这样,你可以在几个点击中创建一个记录器。模板展开后,您可能会看到红线,表示找不到Logger类。只需按下CTRL + SHIFT + O即可调用组织导入功能。You are using shortcuts, aren't you?

  • loglevel-指定级别的日志
    if(${logger:var(java.util.logging.Logger)}.isLoggable(Level.${LEVEL})) {
    ${logger:var(java.util.logging.Logger)}.${level}(${});
    }
    ${cursor}
    让我解释一下细节。$ { logger:var(Java . util . logging . logger)}使用内置的“var”变量。它以默认名称logger开始,以防var变量找不到匹配。然后是var(java.util.logging.Logger),它将对指定类型(在我们的例子中是Logger类型)的变量(成员或本地)的名称求值。此外,${cursor}变量标记了按enter键后光标将跳转的位置。所以扩张后的结果可能是

    [img _ assist | NID = 1429 | title = | desc = |链接=无|对齐=中间|宽度= 297 |高度=66]

    你可能会想如果的目的是什么。它只是为了提高性能。如果不允许指定的级别,将永远不会调用日志记录方法,我们可以省去JVM一些字符串操作来构建消息。
  • readfile-从文件中读取文本

    永远不记得如何打开那个讨厌的文件并从中读取?我也不能,所以我有一个模板。
    BufferedReader in;
    try {
    in = new BufferedReader(new FileReader(${file_name}));
    String str;
    while ((str = in.readLine()) != null) {
    ${process}
    }
    } catch (IOException e) {
    ${handle}
    } finally {
    in.close();
    }
    ${cursor}
专家网络和XML -> XML文件->模板
  • 属国- maven依赖
    <依赖性>
       <groupId>${groupId}</groupId>   
    <artifactId>${artifactId}</artifactId>
    <version>${version}</version>
    </dependency>
    ${cursor}
  • 父母- maven父项目定义
    <parent>
    <artifactId>${artifactId}</artifactId>
    <groupId>${groupId}</groupId>
    <version>${version}</version>
    <relativePath>{$path}/pom.xml</relativePath>
    </parent>
    ${cursor}
web.xml网络和XML -> XML文件->模板
  • servlet-新的servlet定义
    <servlet>
    <servlet-name>${servlet_name}</servlet-name>
    <servlet-class>${servlet_class}</servlet-class>
    <load-on-startup>${0}</load-on-startup>
    </servlet>

    <servlet-mapping>
    <servlet-name>${servlet_name}</servlet-name>
    <url-pattern>*.html</url-pattern>
    </servlet-mapping>
    ${cursor}
JSP页面网页和XML -> JSP文件->模板
  • 弹簧文本-带有标签和错误的spring文本字段
    <label for="${path}" class="${label_class}"><fmt:message key="${path}"/></label>
    <spring:input path="${path}" cssClass="${input_class}"/>
    <spring:errors path="${path}"/> <br/>
    ${cursor}
  • 弹簧-复选框
    <label for="${path}" class="${label_class}"><fmt:message key="${path}"/></label>
    <spring:checkbox path="${path}" cssClass="${input_class}"/> <br/>
    ${cursor}
  • 弹簧选择
    <label for="${path}" class="${label_class}"><fmt:message key="${path}"/></label>
    <spring:select path="${path}" cssClass="${input_class}">
    <spring:options items="${items}" itemLabel="${label}" itemValue="${value}"/>
    </spring:select>
    <spring:errors path="${path}"/> <br/>
    ${cursor}
  • 春季通用
    <label for="${path}" class="${label_class}"><fmt:message key="${path}"/></label>
    <spring:${type} path="${path}" cssClass="${input_class}"/>
    <spring:errors path="${path}"/> <br/>
    ${cursor}
    这些是我最喜欢的。他们经常为我节省大量时间。对我来说,创建弹簧形状从来没有这么容易过。
在某些编辑器类型中,您可以将模板设置为“新”,例如,在XML编辑器中,它是新的XML。这非常有用,因为您可以准备一个新文件的框架。例如,这就是我用来为freemarker应用程序创建新的Spring servlet配置的。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">

<context:component-scan base-package="" />

<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/"/>
</bean>

<bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"/>
<property name="exposeSpringMacroHelpers"><value>true</value></property>
<property name="cache" value="true"/>
<property name="prefix" value="/pages/"/>
<property name="suffix" value=".ftl"/>
</bean>

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename"><value>messages</value></property>
</bean>
</beans>

现在,我可以从模板创建新的XML文件,它将准备好使用。在我了解模板之前,我曾经从一个旧的项目中复制它,或者在Spring文档中搜索它。现在我不必了..

[img _ assist | NID = 1431 | title = | desc = |链接=无|对齐=中间|宽度= 640 |高度=201]

如果你能克服最初的懒惰,从你真正使用的代码片段中创建你自己的模板,那么这种投资很快就会以减少输入的形式得到回报。如果你有一些有趣的模板,请与我们分享。

你可以download the templates并使用进口按钮。