Весна и Guice вместе или просто весна
Я запускаю новое веб-приложение на Java с нуля.
У меня нет большого опыта работы с Spring Framework, но я знаю, что хотел бы использовать некоторые его функции, такие как Transaccions Management.
С другой стороны, мне очень нравится Guice для внедрения зависимостей.
Я знаю, что Guice и Spring могут работать вместе: http://www.jroller.com/mindcrime/entry/an_example_of_integrating_guice
Но прежде чем приступить к разработке своего приложения, я хотел узнать, не сталкивался ли кто-то с такими проблемами.
Кроме того, что мне действительно нравится в Guice, так это то, что вам не нужен XML-файл конфигурации, а только java-модули, которые короче и проще для чтения. Есть ли альтернатива XML-файлам конфигурации на Spring, похожая на Guice?
4 ответа
Я думаю, что только Spring достаточно хорош для корпоративных приложений.
Весенний доцент тоже нужен XML!!! Современные Spring Apps используют JavaConfig и минимальную конфигурацию. Взгляните на Spring Boot Guides. Приложения Whole Spring вообще не могут использовать XML.
Guice хороший, но очень ограниченный. С помощью Spring можно написать веб-приложение или REST-приложение с транзакциями и упорством очень легко и быстро. С Guice все сложнее.
Если вы только начинаете, я рекомендую вам использовать https://github.com/spring-projects/spring-boot
Он имеет отличную функцию автоконфигурации и экономит написание стандартного кода. Я даже могу освободить вас от использования сервера приложений из-за встроенного Tomcat. Например, реализация простого контроллера MVC (который может использоваться как конечная точка REST) выглядит следующим образом:
@Controller
@EnableAutoConfiguration
public class SampleController {
@RequestMapping("/")
@ResponseBody
String home() {
return "Hello World!";
}
public static void main(String[] args) throws Exception {
SpringApplication.run(SampleController.class, args);
}
}
Теперь вы можете выполнить java -jar your_package.jar
и это все. Вы также получите управление транзакциями, интеграцию с базой данных и т. Д. Дополнительные примеры можно найти в указанной ссылке, особенно в каталоге https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples
Spring имеет конфигурацию аннотаций на основе Java для двух основных выпусков. Вам не нужно писать ни одной строки XML (даже web.xml!)
Я работал с Guice и Spring. Guice достаточно для небольших проектов, которым требуется DI, но если вы собираетесь использовать Spring for MVC или поддержку транзакций, вы также можете просто использовать его DI. У Guice также нет хорошей поддержки профилей, как у Spring - вам нужно самостоятельно переключать модули вручную, если вы хотите иметь отдельные bean-компоненты для локальной разработки, тестовых сред и производства.
В Google Guice почти есть отображение 1:1 для всех концепций внедрения зависимостей Spring, но есть еще несколько интересных вещей:
1. Это все на Java. Google Guice содержит все конфигурации в коде Java, поэтому нам не нужно иметь дело с какими-либо конфигурациями xml или чем-то еще.
2. Лучше сообщения об ошибках. У Guice есть перехватчик, который очищает и отбрасывает более хорошие следы стека. Весна просто выплевывает все.
3. Своевременное связывание (или неявное связывание). Это означает, что если у вас есть конструктор с нулевым аргументом, дополнительная привязка не требуется, просто вставьте его! То же самое, если вы пытаетесь внедрить конструктор с несколькими аргументами, которые являются либо конструкторами с нулевым аргументом, либо уже внедрены, нет необходимости в дополнительной настройке. Опять же, просто введите это!
4. Стремительный / ленивый впрыск Когда вы впрыскиваете с Spring, он говорит, что я впрысну ничего или все вещи. В Guice есть опция для ленивого внедрения, что означает создание только той части графа зависимостей, которая мне нужна. Это означает несколько вещей: вам не нужны эти странные специальные файлы для тестирования Spring, Guice внедряет намного быстрее в тестировании, и вы можете запускать интеграционные тесты в Eclipse с минимальными настройками или без них!
5. Связывание по типам. Это отличается от Spring, который связывает по именам. В Spring, если вы случайно связали два экземпляра с одним и тем же именем, Spring потерпит молчание и еще больше запутает вас, приняв связывание, которое было последним (yech). Spring предлагает вариант "связать по типу", но не позволяйте ему обмануть вас - его базовая реализация по-прежнему является строкой.
Источник: https://github.com/google/guice
Я бы также посоветовал вам взглянуть на HK2 для облегченного двигателя J2SE DI. Он похож на Guice и CDI и имеет много возможностей расширения, которые могут вас заинтересовать. Он также работает с Guice и Spring через двунаправленные мосты. Вы можете начать изучать HK2 здесь: http://hk2.java.net/. Информация о мосте Гисе находится здесь: https://hk2.java.net/2.2.0-b27/guice-bridge.html. Информация о Весеннем мосту находится здесь: https://hk2.java.net/2.2.0-b27/spring-bridge.html.
Решение о том, какого поставщика DI использовать, во многом зависит от особенностей, необходимых для вашего приложения.