Что делает Spring framework облегченным контейнером?

#spring #terminology

#spring #терминология

Вопрос:

Когда люди упоминают, что Spring является облегченным контейнером по сравнению с другими фреймворками, что они имеют в виду? Что он занимает меньше памяти в системе или в нем нет операций типа start stop, которые у нас есть для контейнеров EJB, и он не использует специальный контейнер?

Что делает Spring облегченным контейнером?

Ответ №1:

Независимо от того, является ли он «легковесным» или «тяжеловесным», все дело в сравнении. Мы считаем Spring легковесным, когда сравниваем с обычным контейнером J2EE. Он легковесен в смысле дополнительного объема памяти для предоставляемых средств (например, управление транзакциями, жизненный цикл, управление зависимостями компонентов)

Однако иногда существуют другие критерии для сравнения «веса» контейнера, например, сложность проектирования и реализации; предоставляемые возможности и т.д.

По иронии судьбы, Spring иногда рассматривают как тяжеловесный контейнер по сравнению с другими контейнерами на основе POJO, такими как Guice и Plexus.

Комментарии:

1. Утверждение, что Spring легковесен по сравнению с EJB 1 и 2, является правильным утверждением… но вся версия Encylopedia Britanica для двух книжных полок облегченна по сравнению с EJB 1 и 2, поэтому не стоит благодарности за то, что она легче EJB 1 и 2. Недавнее вынужденное использование Spring подтвердило все мои ожидания — Spring определенно тяжеловесный, крайне навязчивый, сложный в отладке (может ли ваш отладчик работать с XML или аннотациями? У меня ни то, ни другое) и во многих областях, где это вторгается, фреймворк избыточен по сравнению с другими доступными решениями. Слои за слоями аннотированных «OJOS» (-P: не обычный)

2. Если вы работаете с разработкой Enterprise Java с начала 2000-х годов, вы будете знать, что сравнивать с J2EE не «бессмысленно» (не только EJB1 и 2, чтобы быть явным). На тот момент единственной «проверенной» платформой корпоративных приложений была J2EE. Spring — это первая альтернатива контейнеру, которая доказала свою работоспособность. Если вы посмотрите на J2EE и другой альтернативный контейнер (например, когда-нибудь слышали об Avalon?), Spring действительно легковесен и не навязчив. Конечно, впоследствии появляются другие контейнеры еще более легкого веса, но DI Spring создает основу для всех подобных легковесных контейнеров.

3. кстати, хотите ли вы сделать Spring тяжеловесным, навязчивым или сложным для отладки, это всего лишь вопрос выбора. В большинстве случаев вы можете включать нужные вам части (например, если вам просто нужен DI, вам не нужно включать Spring MVC или даже Spring AOP). Навязчивость во многих случаях также связана с вашим выбором: вы можете использовать специфичные для Spring интерфейсы или помощники, но большинство из них могут быть достигнуты альтернативным ненавязчивым способом. Для отладки Spring предоставляет конфигурацию на базе Java, которая, я полагаю, может решить вашу проблему.

Ответ №2:

Spring называет себя «легковесным», потому что вам не нужно использовать все Spring , чтобы использовать его часть. Например, вы можете использовать Spring JDBC без Spring MVC.

Spring предоставляет различные модули для разных целей; вы можете просто внедрить зависимости в соответствии с вашим требуемым модулем. То есть вам не нужно загружать или внедрять все зависимости или все JAR для использования определенного модуля.

введите описание изображения здесь

Если вы хотите запустить приложение Java EE, вы не можете просто создать небольшое приложение, которое будет работать само по себе. Для запуска вашего приложения вам понадобится сервер приложений Java EE, такой как Glassfish, WebLogic или WebSphere. Большинство серверов приложений представляют собой большие и сложные части программного обеспечения, которые нетривиально установить или настроить.

В Spring вам такая вещь не нужна. Вы можете использовать Spring dependency injection, например, в любой небольшой автономной программе.

Ответ №3:

Я думаю, что «легкий» — это в основном модное слово. Это значение очень субъективно и зависит от контекста. Это может означать «низкий объем памяти», это могут быть низкие накладные расходы на выполнение, низкие затраты на запуск. Люди также используют его, чтобы различать некоторый воспринимаемый уровень сложности и / или кривую обучения. В любом случае, это, безусловно, относительно, поскольку ни на одной шкале нет определенной точки, где «легкий» становится «тяжелым» с точки зрения «веса».

Лично я считаю, что это опасное слово, поскольку оно не имеет реального, поддающегося количественной оценке значения. Это то, что люди добавляют в предложения по архитектуре, чтобы усилить раздел «pro» определенного фреймворка, который они все равно хотят использовать. Если вы видите или слышите, что он используется в любой подобной ситуации, это прекрасная возможность спросить «что это значит?». Если вы получаете сердитый или разочарованный ответ (в сочетании с закатыванием глаз и покачиванием головой), это означает, что пользователь определился с определенной архитектурой, но не сумел сформулировать связные или объективные причины для этого.

РЕДАКТИРОВАТЬ: не уверен, что я бы тоже классифицировал spring как «контейнер», но это аналогичное обсуждение яблок и апельсинов. Я бы назвал это фреймворком.

Комментарии:

1. Я согласен, Spring — это фреймворк, а не контейнер. Контейнеры в мире J2EE / сервлетов представляют собой контейнеры «приложений» — или то, внутри чего выполняются веб-приложения. Spring — это фреймворк, который некоторые разработчики Java предпочитают добавлять в свои Java-приложения. Другие достигают того же по-разному с помощью разных фреймворков, таких как Spring, некоторые используют чрезвычайно облегченные фреймворки, а другие все еще не используют фреймворки (редко)

Ответ №4:

Spring имеет небольшой вес, потому что другие контейнеры J2ee, особенно EJB2.1, требуют дополнительной настройки, в них может быть много кода «ничего не делай», у них сложная структура каталогов для упаковки приложений, в целом это требует дополнительной памяти; с другой стороны, spring минимизирует все это.поэтому он легкий.

Комментарии:

1. Я тоже думаю, что это отвечает на вопрос.. Вы можете оформить заказ docs.jboss.com/books/lightweight/ch01.html для получения дополнительной информации

Ответ №5:

Я думаю, можно также сказать, что spring легковесен, потому что он использует POJO (обычный старый java-объект) .Класс POJO не требует реализации, расширяет API, специфичный для технологий (интерфейсы, классы), или он не ограничен каким-либо API, специфичным для технологии