Существует еще один способ использования Spring-управляемых компонентов в JSF-управляемых компонентах, просто расширяя ваш JSF-компонент из SpringBeanAutowiringSupport
, а Spring будет обрабатывать инъекцию зависимостей.
@ManagedBean // JSF-managed.
@ViewScoped // JSF-managed scope.
public class GoodBean extends SpringBeanAutowiringSupport {
@Autowired
private SpringBeanClass springBeanName; // No setter required.
// springBeanName is now available.
}
В первом приближении, что действительно будет иметь значение для Вас, на практике, насколько удобный и интуитивный нотация к Вашим глазам.
Однако я сделал проекты с ANTLR и JavaCC, и нашел, что ANTLR был ужасно тяжел для большинства вещей.
ANTLR более полно показан: это намного больше компилятор компилятора поля - lexing, парсинг, AST, древовидные преобразования и генерация кода.
Для JavaCC, это - намного больше Парсер-генератор, чем компилятор компилятора. Поддержка AST оказывается через другой lib под названием JJTree.
Я не использовал парсеры-генераторы в некоторое время, но несколько лет назад, когда я интересовался ими, я не забываю любить SableCC лучше всего. Это реализовало некоторые интересные идеи относительно объектно-ориентированного поколения синтаксического анализатора, которое может или не могло быть взято альтернативами.
Второй джамеш выше.
ANTLR имеет более широкие возможности: это гораздо больше компилятора из коробки компилятор - лексирование, парсинг, AST, дерево преобразования и генерация кода.
Для JavaCC это больше синтаксический анализатор генератор, чем компилятор компилятора. Поддержка AST осуществляется через другая библиотека под названием JJTree.
По моему личному опыту, вы можете делать гораздо больше с ANTLR, включая передачу параметра между правилами и через все подправила, что очень помогает при создании сложного парсера, такого как парсер для С #. Кроме того, переписывание правила - тоже классика. Это поможет вам легко отформатировать идеальный AST.
Однако он действительно тяжелый. Для простого проекта вы, вероятно, никогда не воспользуетесь этими функциями. Javacc для этого круче.
Конкретное преимущество ANTLR перед JavaCC заключается в том, что он имеет генераторы для языков, отличных от Java. Это может значительно упростить перенос вашего языка в другие места.
Есть пара альтернатив, которые вы не должны исключать:
В целом, я создаю впечатление, что годы генераторов кода закончились. Если бы я был бы тобой, я бы использовал инструментарий комбинатора парсера Scala. В основном, любая IDE поддерживает SCALA, также «поддерживает» этот комбинатор парсера. Производительность хорошая, афайк.
Кстати, ANTLR имеет вполне достойную поддержку IDE, как плагин Eclipse (но, возможно, есть также что-то в Intellij - я не помню.) Итак, если вы решите классический подход определения вашего лексического анализатора и Парсер за пределами вашего языка, то antlr должен быть вашим выбором, я думаю. Он имеет самую большую раскладку среди разработчиков Java, есть поддержка инструментов, и у автора Antlr есть отличная книга. Я не думаю, что какая-либо из других наборов инструментов может утверждать, что.
Что касается проблем, которые вы упомянули, я бы предположил, что Javacc был лучшим выбором. Для разработчика Java быстрее учиться (синтаксис чрезвычайно похоже на обычную Java), документация всеобъемлющая, а интеграция Eclipse адекватна.