Какие шаблоны проектирования используются в Spring framework? [закрыто]

90

Какие шаблоны проектирования используются в Spring framework?

Тони
источник
Он включает более 10 шаблонов, включая ..MVC, Front Controller, View Helper, Singleton, Prototype, Factory и т. Д. javabench.in/2012/02/design-patterns-being-used-in-spring.html
Рауль

Ответы:

74

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

  • Прокси - широко используется в АОП и удаленном взаимодействии .

  • Синглтон - beans, определенные в файлах конфигурации Spring, по умолчанию являются одиночными.

  • Шаблонный метод - широко используется для работы с повторяющимся стандартным кодом (например, закрытие соединений и т. Д.). Например, JdbcTemplate , JmsTemplate , JpaTemplate .


Обновите следующие комментарии: Для MVC вы можете прочитать Справочник по MVC

Некоторые очевидные шаблоны, используемые в MVC:

  • Контроллер представления модели :-). Преимущество Spring MVC в том, что ваши контроллеры являются объектами POJO, а не сервлетами. Это упрощает тестирование контроллеров. Следует отметить, что от контроллера требуется только возвращать имя логического представления, а выбор представления остается за отдельным ViewResolver . Это упрощает повторное использование контроллеров для различных технологий просмотра.

  • Передний контроллер . Spring предоставляет DispatcherServlet, чтобы гарантировать, что входящий запрос будет отправлен вашим контроллерам.

  • View Helper - Spring имеет ряд настраиваемых тегов JSP и макросов скорости, помогающих отделить код от представления в представлениях.

Инструментарий
источник
Спасибо! Какие шаблоны проектирования используются в модуле Spring MVC?
Тони
10
Я не думаю, что Spring реализует singleton для beans. Обратите внимание, что компонент с одноэлементной областью видимости будет иметь единственный экземпляр для каждого контекста приложения . Итак, если ваше приложение имеет два контекста Spring, они загружают один и тот же одноэлементный компонент, Fooи вы получаете экземпляр для Fooкаждого контекста, вы получите две разные ссылки на объекты. Вместо этого здесь применен шаблон проектирования наилегчайшего веса
Луигги Мендоса
@Luiggi Mendoza, вы имеете в виду, что у весны нет одноэлементных объектов? пожалуйста, объясните мне некоторые пояснения.
Кумаресан Перумал
1
@KumaresanPerumal есть существенная разница между шаблоном Singleton и экземпляром singleton (обратите внимание на верхний / нижний регистр S). Шаблон Singleton - это поддержание одного экземпляра объекта во всем приложении. Что Spring делает при обнаружении одноэлементного компонента, так это создание одного экземпляра для каждого контекста приложения . Контекст приложения является основным компонентом Spring и служит для делегирования создания и извлечения объектов. Одноэлементный компонент создается только один раз для каждого контекста приложения.
Луигги Мендоса
Ссылки для контроллера представления модели, фронт-контроллера и представления помогли перейти на oracle.com/technetwork/java/index.html . Не могли бы вы обновить ответ с помощью рабочей ссылки?
SpringLearner
12

И, конечно же, внедрение зависимостей или IoC (инверсия управления), что является центральным для всего материала BeanFactory / ApplicationContext.

Chochos
источник
10

На самом деле DI - это своего рода шаблон стратегии. Всякий раз, когда вы хотите иметь возможность обмена какой-либо логикой / реализацией, вы обычно находите интерфейс и соответствующий метод установки в классе хоста, чтобы связать вашу индивидуальную реализацию этого интерфейса.

Оливер Дротбом
источник
Ответ от самого Мастера. @Oliver, не могли бы вы указать здесь больше шаблонов?
Gaurav
7

Spring - это набор передовых шаблонов API, вы можете составить список покупок из них, сколько у вас под рукой. Способ, которым разработан API, побуждает вас (но не заставляет) следовать этим шаблонам, и в половине случаев вы следуете им, не зная, что вы это делаете.

Скаффман
источник
3

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

Суман Митра
источник
2

Observer-Observable: используется в механизме событий ApplicationContext

ксевиндик
источник
1

Заводской шаблон также используется для загрузки bean-компонентов через BeanFactory и контекст приложения.

Gurpreet
источник
1

Шаблон фабричного метода: BeanFactory для создания экземпляра объекта. Синглтон: тип экземпляра может быть одноэлементным для контекста. Прототип: тип экземпляра может быть прототипом. Шаблон построителя: вы также можете определить метод в классе, который будет отвечать за создание сложного экземпляра.

Правин Шарма
источник
0

Контейнер Spring генерирует объекты bean-компонентов в зависимости от области видимости bean-компонентов (singleton, prototype и т. Д.). Это похоже на реализацию паттерна Абстрактная фабрика . Я уверен, что во внутренней реализации Spring каждая область должна быть привязана к определенному классу фабрики.

jsr
источник