https://habr.com/ru/post/682720/
Сегодня буду по этому гайду писать микросервис, кто хочет присоединяйтесь. Если будут затыки, буду в комментах писать
Сегодня буду по этому гайду писать микросервис, кто хочет присоединяйтесь. Если будут затыки, буду в комментах писать
Хабр
Большой гайд. Пишем микросервисы на Java и Spring Boot, заворачиваем в Docker, запускаем на EKS, мониторим на Grafana
Туториалы делятся на две больших категории: либо "как нарисовать сову", либо подробно расписанные тысячи шагов в формате "напиши туториал для дурака - и только дурак захочет его читать". К какой из...
👍2
Наследование vs композиции
В чем разница?
Когда мы наследуем мы используем все поля и методы другого класса и если нужно их переопределяем.
Когда мы используем композицию мы берем ту часть класса которая нам нужна.
Пример композиции на картинке, в классе Person нам нужно использовать из класса Job, только set и get.
Так же можно заметить, что класс Person не может быть наследником Job по контексту, т.к это две разные смысловые сущности.
В чем разница?
Когда мы наследуем мы используем все поля и методы другого класса и если нужно их переопределяем.
Когда мы используем композицию мы берем ту часть класса которая нам нужна.
Пример композиции на картинке, в классе Person нам нужно использовать из класса Job, только set и get.
Так же можно заметить, что класс Person не может быть наследником Job по контексту, т.к это две разные смысловые сущности.
👎1
Какие модификаторы доступа можно применить к только что созданному классу?
Anonymous Poll
38%
private
76%
public
36%
protected
67%
default
Фабрика бинов
Для создания фабрики 🏭бинов в Spring можно использовать конфигурационный класс с аннотацией @Configuration. В нем необходимо определить методы, которые будут создавать бины с помощью аннотации @Bean.
В данном случае конфигурационный класс BeanFactory содержит два метода-определения бинов: exampleService и dependency. Каждый из них создает экземпляр соответствующего класса и возвращает его.
После этого можно использовать бины в приложении с помощью аннотации @Autowired или через конструктор, что предпочтительнее внедряя 💉их через конструктор!
Для создания фабрики 🏭бинов в Spring можно использовать конфигурационный класс с аннотацией @Configuration. В нем необходимо определить методы, которые будут создавать бины с помощью аннотации @Bean.
В данном случае конфигурационный класс BeanFactory содержит два метода-определения бинов: exampleService и dependency. Каждый из них создает экземпляр соответствующего класса и возвращает его.
После этого можно использовать бины в приложении с помощью аннотации @Autowired или через конструктор, что предпочтительнее внедряя 💉их через конструктор!
Почему для создания Spring beans используют интерфейсы?
Anonymous Poll
67%
Улучшенное тестирование. В тестах бин может быть заменен специальным объектом(mock или stub)
41%
Позволяет использовать механизм динамических прокси
44%
Позволяет скрывать реализацию
Динамическое прокси в Java
Cпособ создания прокси-объекта, который позволяет динамически реализовывать интерфейсы во время выполнения.
Это означает, что вы можете использовать динамическое прокси, чтобы создать объект, который реализует интерфейсы, которые вы можете определить во время выполнения. Это может быть полезно в случаях, когда вы хотите создать объекты с динамически изменяемым поведением.
Пример тут:
https://javarush.com/groups/posts/2281-dinamicheskie-proksi
Cпособ создания прокси-объекта, который позволяет динамически реализовывать интерфейсы во время выполнения.
Это означает, что вы можете использовать динамическое прокси, чтобы создать объект, который реализует интерфейсы, которые вы можете определить во время выполнения. Это может быть полезно в случаях, когда вы хотите создать объекты с динамически изменяемым поведением.
Пример тут:
https://javarush.com/groups/posts/2281-dinamicheskie-proksi
Жизненный цикл бина в контейнере
Когда контейнер запускается, он создает бин, инициализирует его и вызывает метод инициализации.
Затем контейнер использует бин для выполнения запросов и предоставления услуг.
Когда контейнер завершает работу, он вызывает метод завершения для бина, а затем уничтожает его.
Когда контейнер запускается, он создает бин, инициализирует его и вызывает метод инициализации.
Затем контейнер использует бин для выполнения запросов и предоставления услуг.
Когда контейнер завершает работу, он вызывает метод завершения для бина, а затем уничтожает его.
Что будет если бин с одним скоупом внедрить в бин с другим скоупом?
Anonymous Quiz
22%
Ошибка
48%
В singleton можно внедрить только prototype или singleton
30%
Если внедрять prototype, то для каждого singleton будет одинаковый prototype
Область видимости — scope.
Существует 2 области видимости по умолчанию
Singleton
Область видимости по умолчанию. В контейнере находится 1 экземпляр бина
Prototype
В контейнере может находится любое количество экземпляров бина
Есть еще четыре скопа в веб приложении, но об этом позже
Существует 2 области видимости по умолчанию
Singleton
Область видимости по умолчанию. В контейнере находится 1 экземпляр бина
Prototype
В контейнере может находится любое количество экземпляров бина
Есть еще четыре скопа в веб приложении, но об этом позже
Что такое идемпотентный метод?
Это метод при вызове которого результат будет одинаковый.
То есть результат после вызова 1 такого метода будет таким же, как и результат после 10ти вызовов этого метода.
Например, если клиент обновляет профиль на сайте и нажимает кнопку обновить, и он это делает случайно несколько раз, идемпотентный PUT срабатывает только один раз.
POST - для создания
PUT - для обновления
Безопасным этот метод считается, когда его вызов не изменяет состояние данных.
Это метод при вызове которого результат будет одинаковый.
То есть результат после вызова 1 такого метода будет таким же, как и результат после 10ти вызовов этого метода.
Например, если клиент обновляет профиль на сайте и нажимает кнопку обновить, и он это делает случайно несколько раз, идемпотентный PUT срабатывает только один раз.
POST - для создания
PUT - для обновления
Безопасным этот метод считается, когда его вызов не изменяет состояние данных.
👍1
Что такое Hibernate?
Это фреймворк для Java, который предоставляет решения для работы с базами данных через объектно-реляционное отображение (ORM).
Он позволяет работать с базами данных, используя объекты Java вместо SQL-запросов.
Hibernate автоматически обрабатывает многие детали работы с базами данных, такие как управление соединениями, транзакциями и кешированием
Это фреймворк для Java, который предоставляет решения для работы с базами данных через объектно-реляционное отображение (ORM).
Он позволяет работать с базами данных, используя объекты Java вместо SQL-запросов.
Hibernate автоматически обрабатывает многие детали работы с базами данных, такие как управление соединениями, транзакциями и кешированием
👍1
Проблема N+1
Возникает при работе с базами данных, когда система делает отдельный запрос к базе данных для каждого объекта, который необходимо загрузить.
Например, у вас есть система, которая работает с базой данных сотрудников. Вы можете иметь сущность "Отдел", которая связана с несколькими сущностями "Сотрудник".
При запросе списка всех отделов система может сделать один запрос к базе данных, чтобы получить список всех отделов, а затем для каждого отдела делать отдельный запрос к базе данных, чтобы получить список сотрудников в этом отделе.
Это приведет к созданию N+1 запросов, где N - число отделов.
Для того, чтобы избежать N+1 используйте @ BatchSize или join fetch, более подробно в этой статье:
https://sysout.ru/n-1-problema-v-hibernate/
Возникает при работе с базами данных, когда система делает отдельный запрос к базе данных для каждого объекта, который необходимо загрузить.
Например, у вас есть система, которая работает с базой данных сотрудников. Вы можете иметь сущность "Отдел", которая связана с несколькими сущностями "Сотрудник".
При запросе списка всех отделов система может сделать один запрос к базе данных, чтобы получить список всех отделов, а затем для каждого отдела делать отдельный запрос к базе данных, чтобы получить список сотрудников в этом отделе.
Это приведет к созданию N+1 запросов, где N - число отделов.
Для того, чтобы избежать N+1 используйте @ BatchSize или join fetch, более подробно в этой статье:
https://sysout.ru/n-1-problema-v-hibernate/
🔥3