Принцип инверсии зависимостей (Dependency Inversion Principle — DIP, буква D в аббревиатуре SOLID), описанный Робертом Мартином, состоит из двух постулатов:
- Высокоуровневые модули не должны зависеть от низкоуровневых; и те и другие должны зависеть от абстракций
- Абстракции не должны зависеть от деталей, детали должны зависеть от абстракций
Инверсия зависимостей заключается в том, что модули разных уровней зависят не друг от друга, а от абстракций. В общих чертах принцип инверсии зависимостей сводится к следующему набору простых правил:
- Взаимодействие между классами должно быть реализовано через интерфейсы или абстрактные классы
- Типами всех членов классов должны быть интерфейсы или абстрактные классы
- Классы, являющиеся конечными реализациями не должны расширяться (или должны быть финальными)
- Аналогично методы не должны перекрываться при наследовании (или быть финальными)
Читать далее SOLID на практике — принцип инверсии зависимостей

Фреймворк Spring Security позволяет реализовать авторизацию в приложении
In this post, I will describe Spring Restdocs and Spring Cloud Contract integration into Cucumber tests. The main problem is that we can’t use the most of common JUnit and Spring Test annotations like @Before, @After and @Rule in Cucumber tests, so we have to set up testing environment manually.
В данной статье я рассмотрю процесс разработки простого веб-приложения с использованием Spring и Thymeleaf. Данный проект будет использоваться в последующих статьях, в рамках которых приложение будет описано дальнейшее развитие приложения. Исходный код проекта доступен
В