Для чего именно предназначена Spring Framework? [закрытый]

Я много слышал о Весна, люди говорят во всем интернете, что весна является хорошей основой для веб-разработки. Для чего именно предназначена Spring Framework?

17 ответов


в основном весна является основой для зависимость-инъекций который является шаблоном, который позволяет создавать очень развязанные системы.

проблема

например, предположим, что вам нужно перечислить пользователей системы и, таким образом, объявить интерфейс под названием UserLister:

public interface UserLister {
    List<User> getUsers();
}

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

public class UserListerDB implements UserLister {
    public List<User> getUsers() {
        // DB access code here
    }
}

на ваш взгляд, вам необходимо получить доступ к экземпляру (просто пример, помните):

public class SomeView {
    private UserLister userLister;

    public void render() {
        List<User> users = userLister.getUsers();
        view.render(users);
    }
}

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

UserLister userLister = new UserListerDB();

...Я бы связал представление с моей реализацией класса, который обращается к БД. Что делать, если я хочу переключиться с реализации БД на другую, которая получает список пользователей из файла, разделенного запятыми (помните, это пример)? В этом случае я снова перейду к своему коду и изменю последняя строка:

UserLister userLister = new UserListerCommaSeparatedFile();

это не имеет проблем с небольшой программой, как это, но... Что происходит в программе, которая имеет сотни просмотров и аналогичное количество бизнес-классов. Обслуживание становится кошмаром!

Весна (инъекция зависимости) подход

что весна делает это провод классы с помощью XML-файла или аннотаций, таким образом, все объекты создаются и инициализируются Spring и вводят в нужных местах (сервлеты, веб-фреймворки, бизнес-классы, DAOs и т. д. и т. д...).

возвращаясь к примеру весной нам просто необходимо иметь значение userLister поле и иметь либо XML-файл, как это:

<bean id="userLister" class="UserListerDB" />

<bean class="SomeView">
    <property name="userLister" ref="userLister" />
</bean>

или более просто аннотировать файл в нашем классе view с @Inject:

@Inject
private UserLister userLister;

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

List<User> users = userLister.getUsers();  // This will actually work
                                           // without adding any line of code

это здорово! Не так ли?

  • что делать, если вы хотите использовать другую реализацию ваших ? просто измените XML
  • что делать, если нет UserLister реализация готовой? программа временной макет реализации UserLister и облегчить развитие вида
  • что, если я больше не хочу использовать весну? просто не используйте его! Ваше заявление не вкупе к нему. инверсия управления состояния:"приложение управляет платформой, а не платформа управляет приложением".

есть некоторые другие варианты инъекции зависимости вокруг, что, на мой взгляд, сделало весну настолько известной, кроме ее простоты, элегантности и стабильности, что ребята SpringSource запрограммировали много POJOs, которые помогают интегрировать весну со многими другими общими фреймворками, не будучи навязчивыми в вашем приложение. Также Spring имеет несколько хороших подпроектов, таких как Spring MVC, Spring WebFlow, Spring Security и снова список loooong и т. д.

надеюсь, что это помогает. Во всяком случае, я призываю вас читать статья Мартина Фаулера об инъекции зависимостей и инверсии контроля, потому что он делает это лучше, чем я. после понимания основ взгляните на Весна Документации на мой взгляд is используется для будь лучшие весенние книги.


Весна содержит (как Skaffman справедливо указал) структура MVC. Короче говоря, вот мой вклад. Spring поддерживает сегрегацию сервисного слоя, веб-слоя и бизнес-слоя, но то, что он действительно делает лучше всего, - это "инъекция" объектов. Поэтому, чтобы объяснить, что с примером рассмотрим пример ниже:

public interface FourWheel
{
   public void drive();
}

public class Sedan implements FourWheel
{
   public void drive()
   {
      //drive gracefully
   }
}

public class SUV implements FourWheel
{
   public void drive()
   {
      //Rule the rough terrain
   }
}

теперь в вашем коде, у вас есть класс под названием Путешествие следующим образом

public class RoadTrip
{
    private FourWheel myCarForTrip;
}

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

чтобы решить эту проблему, вы хотели бы иметь заводской шаблон в качестве творческого шаблона. Где фабрика возвращает правильный экземпляр. Поэтому в конечном итоге вы получите много кода клея, чтобы правильно создавать объекты. Весна делает работу кода клея лучше всего без этого кода клея. Вы объявляете сопоставления в XML, и он инициализируется объекты автоматически. Он также много использует одноэлементную архитектуру для экземпляров, что помогает оптимизировать использование памяти.

Это также называется инверсией управления. Другие рамки для этого - Google guice, Pico container и т. д.

кроме того, Spring имеет структуру проверки, обширную поддержку DAO layer в сотрудничестве с JDBC, iBatis и Hibernate (и многими другими). Обеспечивает превосходный Транзакционный контроль над транзакциями базы данных.

есть еще много весной, которые можно прочитать в хороших книгах, таких как"Pro Spring".

следующие URL-адреса могут помочь too.
http://static.springframework.org/docs/Spring-MVC-step-by-step/
http://en.wikipedia.org/wiki/Spring_Framework
http://www.theserverside.com/tt/articles/article.tss?l=SpringFramework


старые дни, весна была ли работа фрейма инъекции зависимостей только как (Guice, PicoContainer,...), но теперь дни это общие решения для построения вас Приложение.

инъекция весенней зависимости, которая, конечно, является сердцем весны, все еще существует (и вы можете просмотреть другие хорошие ответы здесь), но есть больше от весны ....

Spring теперь имеет много проектов, каждый с некоторые подпроекты (http://spring.io/projects). Когда кто-то говорит о весне, вы должны узнать, что весенний проект Он говорит о том, что это только пружинное ядро, которое известно как весенние рамки, или это еще один весенний проект.

некоторые весенние проекты, которые тоже стоит упомянуть:

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

  • весенний замес пакетная база включить разработку
    пакетное приложение
  • весна HATEOAS простое создание базы REST api на HATEOAS principal
  • или и весна читате для разработки мобильных приложений
  • весна shell построить полнофункциональную оболочку (ака командной строки) приложение
  • весеннее облако и поток данных spring cloud для облачных приложения

есть также некоторые небольшие проекты, например весна-социальная-facebook (http://projects.spring.io/spring-social-facebook/)

вы можете использовать spring для веб-разработки, поскольку он имеет Spring MVC модуль, который является частью весенние рамки. Или вы можете использовать spring с другой работой веб-фрейма, например struts2.


что такое весна? Я отвечу на этот вопрос вкратце, но сначала давайте еще раз рассмотрим пример Виктора Гюго. Это не отличный пример, потому что он не оправдывает необходимость в новой структуре.

public class BaseView {
  protected UserLister userLister;

  public BaseView() {
    userLister = new UserListerDB(); // only line of code that needs changing
  }
}

public class SomeView extends BaseView {
  public SomeView() {
    super();
  }

  public void render() {
    List<User> users = userLister.getUsers();
    view.render(users);
  }
}

готово! Так что теперь, даже если у вас есть сотни или тысячи просмотров, вам все равно нужно просто изменить одну строку кода, как в подходе Spring XML. Но изменение строки кода по-прежнему требует перекомпиляции, а не редактирования XML, как вы говорите? Ну, мой суетливый друг., используйте Ant и скрипт прочь!

Так для чего же весна? Это:

  1. слеп разработчики, которые следуют за стадом
  2. работодатели, которые никогда не хотят нанимать выпускников программистов, потому что они не преподают такие рамки в Uni
  3. проекты, которые начинались с плохого дизайна и нуждаются в пэчворке (как показано на примере Виктора Гюго)

дальнейшее чтение:http://discuss.joelonsoftware.com/?joel.3.219431.12


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


Весна-это три вещи.

  1. Spring обрабатывает инъекцию зависимостей, и я рекомендую вам прочитать превосходное введение Мартина Фаулера в инъекцию зависимостей.
  2. второе, что делает Spring, - это обернуть отличные библиотеки Java очень элегантным способом использования в ваших приложениях. Для хорошего примера см., Как Spring обертывает исполнителей задач и планировщик Quartz.
  3. Thirdly Spring предоставляет кучу реализаций веб-материалов, таких как REST, MVC web рамки и многое другое. Они считают, поскольку вы используете Spring для первых двух, возможно, вы можете просто использовать его для всего, что нужно вашему веб-приложению.

проблема в том, что Spring DI действительно хорошо продумана, обертки вокруг других вещей действительно хорошо продуманы в том, что другие вещи все продумали, и весна просто красиво обертывает его. Весенние реализации MVC и REST и все остальное не так хорошо сделано (YMMV, IMHO), но есть исключения (Spring Безопасность-это бомба). поэтому я, как правило, использую весну для DI и ее прохладные обертки, но предпочитаю другие вещи для Web (мне очень нравится гобелен), REST (Джерси действительно прочный) и т. д.


Что вы, вероятно, хотите в веб-приложении с Spring -

  • Spring MVC, который с 2.5+ позволяет использовать POJOs в качестве классов контроллеров, то есть вам не нужно расширяться из какой-либо конкретной структуры (как в Struts или Spring pre-2.5). Классы контроллеров также мертвы просты в тестировании, частично благодаря инъекции зависимостей
  • весенняя интеграция с Hibernate, которая делает хорошую работу по упрощению работы с этим решением ORM (для большинства дела)
  • использование Spring для веб-приложения позволяет использовать объекты домена на всех уровнях приложения - те же классы, которые сопоставляются с помощью Hibernate, являются классами, которые вы используете как " фасоли формы."По своей природе это приведет к более надежной модели домена, отчасти потому, что это сократит количество классов.
  • весенние теги форм облегчают создание форм без особых хлопот.

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


Я вижу две части к этому:

  1. "что такое весна" - > см. принятый ответ Виктора Гюго.
  2. "[...] Весна [a] хорошая основа для веб-разработки" - > люди говорят, что это говорит о Spring MVC. Spring MVC является одной из многих частей Spring и представляет собой веб-фреймворк, использующий общие функции Spring, такие как инъекция зависимостей. Это довольно общая структура в том, что она очень настраивается: вы можете использовать разные слои БД (Библиотеки Hibernate, iBatis, равнина с JDBC), другой вид слоев (JSP, на скорости, по Freemarker...)

обратите внимание, что вы можете отлично использовать Spring в веб-приложении без использования Spring MVC. Я бы сказал, что большинство веб-приложений Java делают это, используя другие веб-фреймворки, такие как калитка, стойки, шов ...


Spring отлично подходит для склеивания экземпляров классов вместе. Вы знаете, что ваши классы Hibernate всегда будут нуждаться в источнике данных, Spring связывает их вместе (и также имеет реализацию источника данных).

ваши объекты доступа к данным всегда будут нуждаться в доступе Hibernate, Spring подключает классы Hibernate в ваш DAOs для вас.

кроме того, Spring в основном дает вам твердые конфигурации кучки библиотек, и в этом дает вам руководство в какие библиотеки следует использовать.

весна действительно отличный инструмент. (Я не говорил о Spring MVC, только о базовой структуре).


принятый ответ не включает использование аннотаций, так как Spring представила поддержку различных аннотаций для конфигурации.

Весна (инъекция зависимости) подход

есть еще один способ подключить классы вместе с использованием XML-файла: аннотации. Давайте используем пример из принятого ответа и зарегистрируем bean непосредственно в классе, используя одну из аннотаций @Component, @Service, @Repository или @Configuration:

@Component
public class UserListerDB implements UserLister {
    public List<User> getUsers() {
        // DB access code here
    }
}

таким образом, когда представление будет создано, у него волшебным образом будет готов к работе UserLister.

вышеуказанное утверждение действительно с небольшим бонусом без необходимости использования XML-файла и проводки с другой аннотацией @Autowired это находит соответствующую реализацию и вводит ее.

@Autowired
private UserLister userLister;

использовать @Bean аннотация о методе, используемом для получения реализации bean для инъекции.


преимущество инъекция зависимостей (DI). Это означает аутсорсинг задачи создания объекта.Позвольте мне объяснить на примере.

public interface Lunch
{
   public void eat();
}

public class Buffet implements Lunch
{
   public void eat()
   {
      // Eat as much as you can 
   }
}

public class Plated implements Lunch
{
   public void eat()
   {
      // Eat a limited portion
   }
}

Теперь в моем коде у меня есть класс LunchDecide следующим образом:

public class LunchDecide {
    private Lunch todaysLunch;
    public LunchDecide(){
        this.todaysLunch = new Buffet(); // choose Buffet -> eat as much as you want
        //this.todaysLunch = new Plated(); // choose Plated -> eat a limited portion 
    }
}

в вышеуказанном классе, в зависимости от нашего настроения, мы выбираем Buffet() или Plated(). Однако эта система тесно связана. Каждый раз, когда нам нужен другой тип объекта, нам нужно изменить код. В этом случае, комментируя строку ! Воображать существует 50 различных классов, используемых 50 различными людьми. Это был бы адский беспорядок. В этом случае нам нужно разъединить систему. Перепишем класс LunchDecide.

public class LunchDecide {
    private Lunch todaysLunch;
    public LunchDecide(Lunch todaysLunch){
        this.todaysLunch = todaysLunch
        }
    }

обратите внимание, что вместо создания объекта с помощью ключевого слова new мы передали ссылку на объект типа обед в качестве параметра в конструкторе. Здесь создание объекта передается на аутсорсинг. Этот код может быть подключен с помощью файла конфигурации Xml (legacy) или аннотаций Java (modern). В любом случае, решение о том, какой тип объекта будет создан, будет принято во время выполнения. Объект будет введен Xml в наш код - наш код зависит от Xml для этой работы. Следовательно, инъекция зависимостей (DI). DI не только помогает сделать нашу систему слабо связанной, но и упрощает написание модульных тестов, поскольку позволяет издеваться над зависимостями. И последнее, но не менее важное: DI streamlines Aspect Oriented Programming (AOP), что приводит к дальнейшей развязке и увеличению модульности. Также Примечание что выше-Ди-впрыск конструктор. DI может быть сделано путем инъекции сеттера , а также-же простой старый метод сеттера из инкапсуляции.


весна является хорошей альтернативой Enterprise JavaBeans (EJB) технологии. Он также имеет компонент Web framework и Web services framework.


весна началась как довольно простая система инъекций зависимостей. Теперь он огромен и в нем есть все (кроме пресловутой кухонной раковины).

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

чтобы увидеть, где все начиналось попробовать:

http://www.amazon.com/Expert-One-Design-Development-Programmer/dp/0764543857/ref=sr_1_1?ie=UTF8&s=books&qid=1246374863&sr=1-1

Это может быть старым, но это это отличная книга.

еще одну хорошую книгу на этот раз, посвященную исключительно весне см.:

http://www.amazon.com/Professional-Java-Development-Spring-Framework/dp/0764574833/ref=sr_1_2?ie=UTF8&s=books&qid=1246374863&sr=1-2

Он также ссылается на более старые версии Spring, но определенно стоит посмотреть.


весна была инъекцией зависимостей в начале, затем добавьте короля оберток почти для всего (обертка над реализациями JPA и т. д.).

долгая история ... большинство частей Spring preffer XML solutions (XML scripting engine ... brrrr), поэтому для DI я использую Guice

хорошая библиотека, но с растущим depnedenciec, например Весна JDBC (возможно, одно решение Java jdbc с параметрами реальных имен) возьмите из maven 4-5 далее.

использование Spring MVC (часть "big spring") для веб-разработки... это" запрос на основе "рамки, есть священная война "запрос vs компонент"... до вас


  • Весна облегченные и гибкие рамки сравнивают к J2EE.
  • контейнер весны действует как заворот управления.
  • Spring использует AOP т. е. прокси и одноэлементные, заводские и шаблонные шаблоны проектирования методов.
  • многоуровневые архитектуры: разделение проблем и многоразовых слоев и простота обслуживания.

enter image description here


в прошлом я думал о Spring Framework с чисто технической точки зрения.

учитывая некоторый опыт командной работы и разработки корпоративных Webapps-я бы сказал, что весна для более быстрое развитие приложений (веб-приложения) by развязка свои индивидуальные элементы (фасоли). Более быстрое развитие делает его настолько популярным. Весна позволяет перенести ответственность здания (проводки вверх) применение на рамки весны. весна рамки инъекции зависимостей отвечает за подключение/ подключения отдельных зерен в рабочее приложение.

таким образом, разработчики могут быть больше сосредоточены на разработке отдельных компонентов (бобов), как только будут определены интерфейсы между бобами.

тестирование такого приложения легко - основное внимание уделяется отдельных зерен. Их можно легко развязать и высмеять, поэтому модульное тестирование является быстрым и эффективным.

Весна framework определяет несколько специализированных компонентов, таких как @Controller (@Restcontroller), @ Repository, @Component служить веб целях. Весна вместе с Maven обеспечивают структуру, которая интуитивно понятна разработчикам. Работа команды легка и быстра по мере того как индивидуальные элементы сдержаны врозь и могут быть повторно использованы.


Spring framework демонстративно хорош для веб-разработки, более специфичной для REST api. Это потому, что это инъекции зависимостей и интеграция с другими модулями, такими как весна безопасности, весна aop, платформа MVC, микрослужб

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

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

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

Весна Данных один проект, которые обеспечивают интеграцию с проект.


Таким образом, все, что вам нужно для создания приложения, имеет Spring.