1 Обзор
В этой статье мы обсудимSpringОсновная ценность в том, что это один из самых популярных фреймворков Java.
Самое главное, мы попытаемся понять, почему мы выбрали Spring. Подробная информация о Spring и его компонентах доступна в нашемШироко представлено в предыдущих руководствах. Итак, мы пропустим вводную часть «как» и сосредоточимся в первую очередь на «почему».
2. Зачем использовать какой-либо фреймворк?
Прежде чем мы начнем обсуждение Spring, давайте сначала поймем, почему нам вообще нужно использовать какой-либо фреймворк.
Язык программирования общего назначения, такой как Java, может поддерживать широкий спектр приложений.Не говоря уже о том, что Java активно совершенствуется с каждым днем.
Кроме того, существует бесчисленное множество библиотек с открытым исходным кодом и проприетарных библиотек, поддерживающих Java в этом отношении.
Итак, именно поэтому нам нужен рамки для этого? Честно говоря, используйте кадры для завершения задачи не являются абсолютно необходимыми. Однако по нескольким причинам обычно используют разумное:
- ПомогитеСосредоточьтесь на основной задаче, а не на связанном с ней шаблоне
- Объединение многолетней мудрости в виде шаблонов проектирования
- Помогите нам соблюдать отраслевые и нормативные стандарты
- Более низкая совокупная стоимость владения приложением
Мы только коснулись поверхности, мы должны сказать, что преимущества трудно игнорировать. Но это невозможно быть положительным, поэтому обратите внимание на:
- Заставьте насПишите приложения особым образом
- Привязка к конкретным версиям языков и библиотек
- Объем ресурсов, добавленный в приложение
Откровенно говоря, в разработке программного обеспечения и фреймворков нет серебряной пули, и Java, безусловно, не исключение. Поэтому какой фреймворк или какой фреймворк не следует выбирать в зависимости от контекста.
К концу этой статьи мы будем лучше принимать решения о Spring в Java.
3. Краткий обзор весной экосистемы
Прежде чем мы начнем качественную оценку весенних рамок, давайте посмотрим на ближе к весной экосистему - это то, что она выглядит.
Весна вышла где-то в 2003 году, Java Enterprise Edition быстро развивалась в то время, и разработка корпоративных приложений была захватывающей, но в то же время утомительной!
Spring изначально была JavaКонтейнер Inversion of Control (IoC). Мы до сих пор в основном ассоциируем с ним Spring, по сути, он составляет ядро фреймворка, как и другие проекты, разработанные поверх него.
3.1 Spring Фреймворк
Весенний фреймворкразделен на модули, что позволяет легко выбирать, какие части использовать в любом приложении:
- Core: Предоставляет основные функции, такие как DI (внедрение зависимостей), интернационализация, проверка и АОП (аспектно-ориентированное программирование).
- Data Access: Поддерживает доступ к данным через JTA (Java Transaction API), JPA (Java Persistence API) и JDBC (Java Database Connectivity).
- Web: Также поддерживает API сервлетов (Spring MVC) и совсем недавно реактивные API (Spring WebFlux), а также поддерживает WebSockets, STOMP и WebClient
- Integration: Поддерживает интеграцию в Enterprise Java через JMS (служба сообщений Java), JMX (расширения управления Java) и RMI (вызов удаленного метода).
- Testing: Поддерживает модульное и интеграционное тестирование с фиктивными объектами, тестовыми приспособлениями, управлением контекстом и кэшированием.
3.2 Весенний проект
Однако Весна дорожеНадежная экосистема, которая выросла за эти годы и продолжает расти.Их структураВесенний проект, которые разрабатываются поверх фреймворка Spring.
Хотя список проектов Spring длинный и постоянно меняется, есть несколько вещей, о которых стоит упомянуть:
- Boot: предоставляет нам набор настраиваемых, но расширяемых шаблонов для создания различных проектов на основе Spring практически в кратчайшие сроки. Это позволяет очень легко создавать автономные приложения Spring со встроенным Tomcat или подобными контейнерами.
- Cloud: Обеспечивает поддержку для простой разработки некоторых распространенных шаблонов распределенных систем, таких как обнаружение служб, автоматические выключатели и шлюзы API. Это помогает нам сократить усилия по развертыванию таких стандартных шаблонов на локальных, удаленных и даже размещенных платформах.
- Security: обеспечивает надежный механизм разработки аутентификации и авторизации для проектов на основе Spring с широкими возможностями настройки. С минимальной декларативной поддержкой мы получаем защиту от распространенных атак, таких как фиксация сеанса, кликджекинг и подделка межсайтовых запросов.
- Mobile: Предоставление устройства обнаружения и соответствующей настройки поведения приложения. Кроме того, восприятие поддержки устройства View Manager, чтобы получить лучший пользовательский опыт, настройки сайта и переключатель управления сайтом.
- Batch: Предоставляет облегченную платформу для разработки пакетных приложений для корпоративных систем, таких как архивирование данных. Существует интуитивно понятная поддержка планирования, перезапуска, пропуска, сбора метрик и ведения журнала. Кроме того, поддерживаются задания большого объема для масштабирования за счет оптимизации и разделения.
Излишне говорить, что это довольно абстрактное введение в то, что может предложить Spring. Но это дает нам достаточно информации об организации и широте Spring для дальнейшего обсуждения.
4. Весенние операции
Люди привыкли добавлять программу hello world, чтобы узнавать о любой новой технологии.
ПосмотримКак легко подготовить программу, которая не просто Hello World. Мы создадим приложение, которое предоставляет операции CRUD как REST API для объекта домена, такого как сотрудник, поддерживаемый базой данных в памяти. Что еще более важно, мы будем использовать базовую аутентификацию для защиты наших конечных точек мутации. Наконец, ни одно приложение не может быть реализовано без старых добрых модульных тестов.
4.1 Настройки проекта
мы будем использоватьSpring InitializrНастройте проект Spring Boot, удобный онлайн-инструмент для начальной загрузки проекта с правильными зависимостями. Мы добавим Web, JPA, H2 и Security в качестве зависимостей проекта, чтобы правильно настроить параметры конфигурации Maven. Болееподробное руководствов одной из наших предыдущих статей.
4.2 Модель домена и постоянство
Делать нечего, и мы готовы определить модель предметной области и постоянство.
Давайте сначалаEmployeeОпределяется как простой объект JPA:
@Entity
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@NotNull
private String firstName;
@NotNull
private String lastName;
// Standard constructor, getters and setters
}
Обратите внимание, что мы включили автоматически сгенерированный идентификатор в определение объекта.
Теперь нам нужно определить репозиторий JPA для сущности. Вот где Spring делает это действительно легко:
public interface EmployeeRepository
extends CrudRepository<Employee, Long> {
List<Employee> findAll();
}
Все, что нам нужно сделать, это определить такой интерфейс,Spring JPA предоставит нам реализацию, дополненную стандартными и пользовательскими действиями.. Довольно аккуратно! Узнайте больше о других наших статьяхИспользование Spring Data JPAДетали.
4.3 Контроллер
Теперь нам нужно определить сетевой контроллер для маршрутизации и обработки наших входящих запросов:
@RestController
public class EmployeeController {
@Autowired
private EmployeeRepository repository;
@GetMapping("/employees")
public List<Employee> getEmployees() {
return repository.findAll();
}
// Other CRUD endpoints handlers
}
На самом деле, все, что нам нужно сделать, этоАннотируйте этот класс и определите метаинформацию маршрутизацииИ каждый метод обработчика.
Как им пользоваться, подробно обсуждалось в нашей предыдущей статье.Весенний REST-контроллер.
4.4 Безопасность
Итак, теперь у нас все определено, но как нам защитить такие операции, как создание или удаление сотрудников? Нам не нужен неаутентифицированный доступ к этим конечным точкам!
Spring Security преуспевает в этом:
@EnableWebSecurity
public class WebSecurityConfig
extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http)
throws Exception {
http
.authorizeRequests()
.antMatchers(HttpMethod.GET, "/employees", "/employees/**")
.permitAll()
.anyRequest()
.authenticated()
.and()
.httpBasic();
}
// other necessary beans and definitions
}
здесь естьНужно понимать больше деталей, но самое главноеМы разрешаем только неограниченные декларативные способы операций GET.
4.5 Тестирование
Теперь мы все сделали, но подождите, как мы это проверим?
Давайте посмотрим, может ли Spring упростить модульный тест, написанный контроллером REST:
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
@AutoConfigureMockMvc
public class EmployeeControllerTests {
@Autowired
private MockMvc mvc;
@Test
@WithMockUser()
public void givenNoEmployee_whenCreateEmployee_thenEmployeeCreated() throws Exception {
mvc.perform(post("/employees").content(
new ObjectMapper().writeValueAsString(new Employee("First", "Last"))
.with(csrf()))
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON))
.andExpect(MockMvcResultMatchers.status()
.isCreated())
.andExpect(jsonPath("$.firstName", is("First")))
.andExpect(jsonPath("$.lastName", is("Last")));
}
// other tests as necessary
}
Как мы можем видеть,Spring предоставляет нам необходимую инфраструктуру для написания простых модульных и интеграционных тестов., в противном случае эти тесты будут зависеть от контекста Spring, который необходимо инициализировать и настроить.
4.6 Запуск приложения
Наконец, как нам запустить это приложение? Это еще один интересный аспект Spring Boot. Хотя мы можем упаковать его как обычное приложение и развернуть традиционно на сервлет-контейнере.
Но какое удовольствие!Весенняя загрузка со встроенным сервером Tomcat:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Это предварительно созданный класс как часть программы начальной загрузки со всеми необходимыми деталями для запуска этого приложения с помощью встроенного сервера.
также,Это очень настраиваемый.
5. Альтернативы Spring
В то время как выбор использования фреймворка относительно прост, выбор между фреймворками часто делает наш выбор пугающим. Но для этого мы должны иметь хотя бы поверхностное представление о том, какие альтернативы доступны тому, что предлагает Spring.
Как упоминалось ранее,Spring Framework и его проекты предлагают корпоративным разработчикам широкий спектр возможностей.. Если мы быстро оценим современные Java-фреймворки, они даже не сравнимы с экосистемой, которую предлагает нам Spring.
Однако для конкретных доменов они являются убедительным аргументом в пользу выбора альтернативы:
- Guice: Предоставляет надежный контейнер IoC для приложений Java.
- Play: отлично подходит в качестве веб-фреймворка с отзывчивой поддержкой
- Hibernate: инфраструктура доступа к данным, основанная на поддержке JPA.
В дополнение к этому есть новые функции, которые обеспечивают более широкую поддержку, чем конкретные домены, но все же не охватывают все, что может предложить Spring:
- Micronaut: платформа на основе JVM, адаптированная для облачных микросервисов.
- Quarkus: стек Java нового века, который обещает более быстрое время запуска и меньший объем памяти.
Очевидно, что нет необходимости и возможности полностью перебирать этот список, но здесь мы получаем общее представление.
6. Почему стоит выбрать Весну?
Наконец, мы создали все необходимые контексты для решения нашего основного вопроса: почему Spring? Мы понимаем, как фреймворки могут помочь нам в разработке сложных корпоративных приложений.
Кроме того, мы понимаем выбор, который мы делаем для конкретных вопросов, таких как Интернет, доступ к данным, интеграция в фреймворки, особенно Java.
Теперь, из всего этого, где сияет Весна? Давайте исследовать.
6.1. Юзабилити
Одним из ключевых аспектов любого фреймворка является простота его использования разработчиками. Spring принимает несколько вариантов конфигурации и соглашенийРазработчики могут легко начать, а затем настроить именно то, что им нужно.
рисунокТакие проекты, как Spring Boot, упрощают загрузку сложного проекта Spring.. Не говоря уже о том, что у него есть отличная документация и учебные пособия, которые помогут любому начать работу.
6.2 Модульность
Еще одним ключевым аспектом Spring является его высокая модульность. Мы можем использовать всю структуру Spring или только необходимые модули. Кроме того, мы можем выбрать по мере необходимостиСодержит один или несколько проектов Spring.
Кроме того, мы можем использовать другие фреймворки, такие как Hibernate или Struts!
6.3. Постоянство
Хотя веснаПоддерживаются не все спецификации Java EE, но поддерживаются все технологии., обычно улучшая поддержку стандартных спецификаций, когда это необходимо. Например, Spring поддерживает репозитории на основе JPA, поэтому переключение поставщиков становится тривиальным.
Кроме того, Spring поддерживает отраслевые спецификации, такие как Spring Web Reactive.Reactive StreamиSpring HATEOASХАТЕОАС под.
6.4 Тестируемость
Принятие любого фреймворка также во многом зависит от того, насколько легко тестировать приложения, построенные на нем. Ядром весны являетсяЗащита и поддержка разработки через тестирование(ТДД).
Приложения Spring в основном состоят из POJO, что, естественно, делает модульное тестирование относительно простым. Однако Spring предоставляет объекты Mock для таких сценариев, как MVC, в противном случае модульное тестирование усложняется.
6.5. Зрелость
Spring имеет долгую историю инноваций, внедрения и стандартизации. За прошедшие годы он достаточно созрел, чтобы стать средством разработки приложений для крупных предприятий.Стандартные решения наиболее распространенных проблем.
Еще более захватывающим является активное развитие и поддержка. Поддержка новых языковых функций и решений для корпоративной интеграции разрабатывается каждый день.
6.6 Поддержка сообщества
И последнее, но не менее важное: любой фреймворк или даже библиотека классов выживает в отрасли благодаря инновациям, и нет лучшего места для инноваций, чем сообщество. ВеснаПрограммное обеспечение с открытым исходным кодом под руководством Pivotal Software, поддерживаемое крупными организациями и отдельными разработчиками.
Это означает, что он остается контекстуальным и часто футуристическим, о чем свидетельствует количество проектов под его эгидой.
7. Причины не использовать Spring
Существует множество приложений, которые могут извлечь выгоду из разных уровней использования Spring, и такие приложения меняются так же быстро, как растет Spring.
Однако мы должны понимать, что Spring, как и другие фреймворки, помогает справиться со сложностями разработки приложений. Это помогает нам избежать распространенных ошибок и обеспечивает поддержку приложения с течением времени.
Этоза счет дополнительных ресурсов и кривой обучения, хотя возможно небольшой. Если действительно есть достаточно простое приложение, которое не должно усложняться, тогда может быть больше преимуществ в том, чтобы вообще не использовать какой-либо фреймворк!
8. Заключение
В этой статье мы обсудили преимущества использования фреймворков в разработке приложений. Мы также кратко обсудили Spring Framework.
При обсуждении этой темы мы также рассмотрели некоторые альтернативные фреймворки, доступные для Java.
Наконец, мы обсудили, что побудило нас выбрать Spring в качестве предпочтительной среды для Java.
Тем не менее, мы должны дать несколько советов в конце этой статьи. Как бы убедительно это ни звучало, в разработке ПООбычно нет единого универсального решения.
Поэтому мы должны использовать нашу мудрость, чтобы выбрать самое простое решение конкретной проблемы, которую мы пытаемся решить.
Отправка преимуществ ~ В ближайшем будущем я организую ранее переведенные статьи в PDF-файлы.
Ответить на фоне публичного аккаунта: 002, чтобы получить его~
Мы продолжим обновлять содержимое PDF-файла в будущем, так что следите за обновлениями!