正如我试图避免代码中的冗余一样,我也试图避免写作中的冗余。我很懒,模板为我写的东西最多。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]
请注意,您不仅获得了一个列表,还获得了一个描述和一个用法示例。
为了清楚起见,我将举例说明一个内置变量--$ {封闭类型}。当这个扩展时,你会得到一个类(或者接口,枚举)的名字,你的模板就是在这个名字中被扩展的。
“但是我怎么用它呢?”,我听到你在问。我准备了几个模板只是为了给你灵感,我相信读完这篇文章后你会发现成千上万的其他模板,我相信你会创建它们并与我们分享。
打开窗口->首选项和类型模板进入搜索框。
您将获得所有编辑器的列表,以及它们各自的模板设置。这是因为模板与编辑器紧密相关——你会在不同的编辑器中得到不同的内置变量。另外请注意,你的列表可能与我的列表不同,这取决于安装的插件。
现在您必须决定您想要创建的模板类型。如果它是一个适用于类、接口和枚举的Java模板,那么选择Java ->编辑器->模板。如果您创建了一个Java模板,您将不能在XML编辑器中使用它,这是意料之中的。
所以点击新的按钮,以获得一个对话框。它在这里,光彩夺目:
姓名是模板的名称。好好选择它,因为它会成为你的模板的捷径。输入模板的名称(或至少几个字符)后,点击CTRL+空格它将被扩展。
描述当模板名称不明确时,您会在模板名称旁边看到。
模式是模板主体。还有语境?这在每个编辑器中都有所不同。如果您查看Java模板中的组合框,您将会看到Java和Javadoc。这是一个简单的上下文,在相应的编辑器中,模板是适用的。
支票自动插入如果在没有其他匹配模板可用时,希望模板在ctrl-space上自动展开。通常最好不要勾选复选框,否则你会得到一个模板建议“弹出”。查看当我在sysout模板上取消选中它时会发生什么。
如果我选中它,它会自动展开,因为没有其他模板匹配sysout*模式。
这是我承诺的清单。我已经分类了。
Java(Java->编辑器->模板)private static final Logger logger = Logger.getLogger(${enclosing_type}.class.getName());请注意${enclosing_type}变量的用法。这样,你可以在几个点击中创建一个记录器。模板展开后,您可能会看到红线,表示找不到Logger类。只需按下CTRL + SHIFT + O即可调用组织导入功能。You are using shortcuts, aren't you?
if(${logger:var(java.util.logging.Logger)}.isLoggable(Level.${LEVEL})) {让我解释一下细节。$ { logger:var(Java . util . logging . logger)}使用内置的“var”变量。它以默认名称logger开始,以防var变量找不到匹配。然后是var(java.util.logging.Logger),它将对指定类型(在我们的例子中是Logger类型)的变量(成员或本地)的名称求值。此外,${cursor}变量标记了按enter键后光标将跳转的位置。所以扩张后的结果可能是
${logger:var(java.util.logging.Logger)}.${level}(${});
}
${cursor}
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}
<groupId>${groupId}</groupId>
<artifactId>${artifactId}</artifactId>
<version>${version}</version>
</dependency>
${cursor}
<parent>
<artifactId>${artifactId}</artifactId>
<groupId>${groupId}</groupId>
<version>${version}</version>
<relativePath>{$path}/pom.xml</relativePath>
</parent>
${cursor}
<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}
<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 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并使用进口按钮。