Статьи

Эффективное затмение: пользовательские шаблоны

Точно так же, как я пытаюсь избежать избыточности в моем коде, так же, как я стараюсь избегать избыточности в моем написании. Я ленивый, и шаблоны делают больше всего для меня. Eclipse поставляется в комплекте с предопределенными шаблонами, но они слишком общие и не все из них слишком полезны. Настоящая сила в пользовательских шаблонах. В этой статье я хотел бы показать вам, как их создавать, и перечислить несколько полезных частей для вдохновения.

Что такое шаблоны

Как и следует из названия, шаблоны — это маленькие кусочки кода с определенными заполнителями. Пример простого шаблона:

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

У каждого шаблона есть имя, которое служит ярлыком для самого шаблона. Вы вводите имя, нажмите CTRL + SPACE, и оно будет расширено.

Наш первый шаблон расширится до

[Img_assist | NID = одна тысяча четыреста двадцать четыре | название = | убывание = | ссылка = нет | выравнивание не = среднего | ширина = 186 | Высота = 19]

Я не буду объяснять здесь, что все это значит, я уже делал это в моем предыдущем посте по шаблонам . Что сейчас важно, так это то, что заполнитель (переменная) $ {text} был выделен и может быть отредактирован немедленно.

Истинную силу шаблонов можно полностью увидеть в более сложных шаблонах. Первая сила заключается в том, что вы можете иметь более одной переменной с одинаковым именем. Наш второй шаблон будет иметь больше переменных:

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

и расширится до

[img_assist | nid = 1428 | title = | desc = | link = none | align = middle | width = 204 | height = 45]

Когда вы начнете печатать сейчас, все вхождения переменной приращения будут изменены. Затем вы можете переключиться на следующую переменную, нажав клавишу TAB . В конце концов, вы можете получить

[img_assist | nid = 1425 | title = | desc = | link = none | align = middle | width = 110 | height = 43]

всего за три нажатия клавиш — один для i , один для TAB и один на 2 .

Чтобы сделать его еще лучше, система шаблонов предоставляет предопределенные переменные, которые будут расширяться в зависимости от их контекста. Я не буду перечислять их, вы можете найти их под кнопкой Вставить переменную.

[img_assist | nid = 1426 | title = | desc = | link = popup | align = middle | width = 640 | height = 274]

Обратите внимание, что вы получаете не только список, вы также получаете описание и пример использования ,

Чтобы прояснить это, я проиллюстрирую одну встроенную переменную — $ {enclosing_type} . Когда этот файл будет расширен, вы получите имя класса (или интерфейса enum), в котором был развернут ваш шаблон.

«Но как я могу использовать это?», Я слышу, вы спрашиваете. Я подготовил несколько шаблонов только для вдохновения, я верю, что после прочтения этого вы найдете тысячи других, и я верю, что вы создадите их и поделитесь ими с нами.

Пользовательские шаблоны

Откройте окно -> Настройки и введите Шаблоны в поле поиска.

[Img_assist | NID = 1427 | название = | убывание = | ссылка = всплывающее окно | ALIGN = среднее | ширина = 640 | высота = 578]

Вы получите список всех редакторов и соответствующие им настройки шаблона. Это потому, что шаблоны тесно связаны с редакторами — вы получите разные встроенные переменные в разных редакторах. Также обратите внимание, что ваш список может отличаться от моего списка, все зависит от установленных плагинов.

Теперь вы должны решить, какой тип шаблона вы хотите создать. Если это шаблон Java, который будет применим в контексте классов, интерфейсов и перечислений, выберите Java -> Editor -> Templates . Если вы создадите шаблон Java, вы не сможете использовать его в редакторе XML, это вполне ожидаемо.

Поэтому нажмите на кнопку New , чтобы получить диалог. Вот оно во всей красе:

[Img_assist | NID = 1430 | название = | убывание = | ссылка = всплывающее окно | ALIGN = среднее | ширина = 640 | высота = 316]

Имя — это имя шаблона. Выберите его хорошо, потому что он будет служить ярлыком для вашего шаблона. После того, как вы введете имя шаблона (или хотя бы несколько символов из его имени) и нажмете CTRL + SPACE, он будет расширен.

Описание — это то, что вы увидите рядом с именем шаблона, когда имя шаблона неоднозначно.

[Img_assist | NID = 1433 | название = | убывание = | ссылка = нет | выравнивание не = средняя | ширина = 415 | Высота = 296]

Шаблон — это тело шаблона. А контекст ? Это варьируется в каждом редакторе. Если вы посмотрите на выпадающий список в шаблонах Java, вы увидите Java и Javadoc. Это простой контекст в соответствующем редакторе, в котором шаблон будет применим.

Установите флажок Автоматически вставлять, если вы хотите, чтобы шаблон автоматически расширялся в пространстве Ctrl, когда нет другого подходящего шаблона. Обычно рекомендуется оставить флажок установленным, в противном случае вы получите шаблонное предложение «всплывающее окно». Посмотрите, что произойдет, когда я уберу галочку с этого шаблона

[Img_assist | NID = 1432 | название = | убывание = | ссылка = нет | выравнивание не = средняя | ширина = 256 | высота = 46]

Если бы я это проверил, он бы автоматически расширился, так как нет другого шаблона, соответствующего шаблону sysout * .

Мой список

Итак, вот список, который я обещал. Я классифицировал это.

Java (
Java-> Редактор-> Шаблоны )

  • logger — создать новый Logger
    private static final Logger logger = Logger.getLogger(${enclosing_type}.class.getName());

    Обратите внимание на использование переменной $ {enclosing_type}. Таким образом, вы можете создать регистратор за несколько просмотров. После расширения шаблона вы, вероятно, получите красные линии, указывающие на то, что класс Logger не найден. Просто нажмите CTRL + SHIFT + O, чтобы вызвать функцию организации импорта. Вы используете ярлыки, не так ли?

  • 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} отмечает место, в котором курсор будет перемещаться после нажатия клавиши ввода. Таким образом, результатом после расширения может быть

    [img_assist | nid = 1429 | title = | desc = | link = none | align = middle | width = 297 | height = 66]

    Вы можете задаться вопросом, какова цель if. Это только для увеличения производительности. Если указанный уровень не разрешен, метод регистрации никогда не будет вызван, и мы можем сэкономить 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}

Maven (
Интернет и XML -> Файлы XML -> Шаблоны )

  • зависимость — maven зависимость
    <зависимость>
       <groupId>${groupId}</groupId>   
    <artifactId>${artifactId}</artifactId>
    <version>${version}</version>
    </dependency>
    ${cursor}
  • parent — maven определение родительского проекта
    <parent>
    <artifactId>${artifactId}</artifactId>
    <groupId>${groupId}</groupId>
    <version>${version}</version>
    <relativePath>{$path}/pom.xml</relativePath>
    </parent>
    ${cursor}

web.xml (
Интернет и XML -> Файлы XML -> Шаблоны )

  • сервлет — новое определение сервлета
    <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 (
Web и XML -> Файлы JSP -> Шаблоны )

  • spring-text — текстовое поле весны с меткой и ошибкой
    <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. Это действительно полезно, так как вы можете подготовить каркас нового файла. Например, это то, что я использую для создания новой конфигурации сервлета Spring для приложения freemarker.

<?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 = | link = none | align = middle | width = 640 | height = 201]

Если вы можете преодолеть начальную лень и создать свои собственные шаблоны из частей кода, которые вы действительно используете, то эти инвестиции вскоре вернутся в виде меньшего количества ввода. Если у вас есть интересные шаблоны, поделитесь ими с нами.

Вы можете скачать шаблоны, упомянутые в этом посте, и импортировать их, используя кнопку « Импорт» в настройках шаблона редактора.