Java Interview Review

@JavaSobes Yoqdi 2 4 000 + O‘zP

Популярные вопросы и ответы с собеседований на Java-разработчика.
Канал для Android-разработчиков @AndroidSobes
Связаться с нами @SobesAdmin
http://itsobes.ru/
Kanal hududi va tili
Rossiya, Rus tili
Kategoriya
Ta’lim


Muallifga yozish
Kanalning hududi
Rossiya
Kanal tili
Rus tili
Kategoriya
Ta’lim
Indeksga qo‘shilgan
18.03.2019 05:12
reklama
Telegram Analytics
TGStat хизмати янгиликларидан бохабар бўлиш учун обуна бўл!
TGAlertsBot
Каналингиз репостлари ва эсловлари ҳақида хабар беради.
SearcheeBot
Telegram-каналлар оламидаги сизнинг йўлбошчингиз.
5 099
ta obunachilar
~4.6k
1 ta e’lon qamrovi
~3.7k
kunlik qamrov
~5
ta e’lon haftasiga
89.9%
ERR %
7.91
iqtibos olish indeksi
Kanalning repost va eslovlari
23 ta kanal eslovlari
18 ta e’lonlar eslovlari
1 ta repostlar
Программист
Продакшн
Clean Code
Новые каналы
Android Interview Review
27 Dec 2019, 18:00
Android Interview Review
23 Dec 2019, 18:00
Android Interview Review
17 Dec 2019, 18:01
Android Interview Review
3 Dec 2019, 18:00
Android Interview Review
22 Nov 2019, 18:00
Android Interview Review
1 Nov 2019, 18:00
Clean Code
17 Oct 2019, 19:00
Next Time
9 Oct 2019, 12:15
Kosmos Time
9 Oct 2019, 12:15
Android Interview Review
8 Oct 2019, 18:00
Android Interview Review
4 Oct 2019, 11:54
Android Interview Review
2 Sep 2019, 18:01
Android Interview Review
27 Aug 2019, 18:01
Android Live 🤖
21 Aug 2019, 11:01
19 Aug 2019, 10:01
Android Interview Review
7 Aug 2019, 18:08
Android Interview Review
31 Jul 2019, 18:01
Android Interview Review
25 Jul 2019, 18:01
Android Interview Review
2 Jul 2019, 18:01
Android Interview Review
20 Jun 2019, 18:01
Android Interview Review
5 Jun 2019, 18:07
Говнокод
4 Jun 2019, 19:05
Android Interview Review
2 Jun 2019, 18:04
Android Interview Review
6 May 2019, 18:01
Android Interview Review
22 Apr 2019, 19:27
Clean Code
19 Apr 2019, 17:00
Coding
15 Apr 2019, 19:00
IT Юмор
22 Mar 2019, 18:00
Программист
19 Mar 2019, 10:15
Говнокод
11 Mar 2019, 16:02
@JavaSobes iqtibos olgan kanallari
Android Interview Review
18 Dec 2019, 18:00
trgt
10 Oct 2019, 18:01
19 Aug 2019, 10:00
Android Interview Review
11 Jul 2019, 19:08
Android Interview Review
3 Apr 2019, 19:00
So‘nggi e’lonlar
O‘chirilgan e’lonlar
Eslovlar bilan
Repostlar
Java Interview Review 21 Feb, 16:01
Что можно импортировать статически?

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

Самое распространенное применение статического импорта – включение констант из константных интерфейсов и статических методов из утилитарных классов. Но также можно включать и изменяемые статические поля других классов.

Отдельно интересен случай nested-класса. Он одновременно является и классом, и статическим членом другого класса. Поэтому для него работает как обычный, так и статический импорт.

Языковая конструкция static import обязана располагаться там же, где и обычные импорты – обязательно между package и объявлением основного класса файла.

#Язык
To‘liq o‘qish
Java Interview Review 19 Feb, 16:01
Как инициализировать переменную функционального интерфейса?

Функциональный интерфейс – всё ещё интерфейс, поэтому остаются доступными стандартные способы. Интерфейс можно реализовать обычным классом, и затем создать его экземпляр оператором new. Можно совместить эти два действия, и создать экземпляр анонимного класса.

Основное преимущество, которое дает функциональный интерфейс – два дополнительных способа инициализации параметров и переменных.

1. Лямбда-выражение: (x, y) -> x * y
2. Ссылка на метод: Math::sqrt

На эти способы накладывается небольшое ограничение: тип функционального параметра/переменной должен быть указан явно. Это значит, что лямбдой или метод-референсом нельзя инициализировать переменную, объявленную ключевым словом var. Также, чтобы передать лямбду или референс в параметр generic-типа, этот тип должен быть ограничен функциональным интерфейсом (должен стираться в него).

#Язык
To‘liq o‘qish
Java Interview Review 18 Feb, 09:33
Готовим сильных Java-разработчиков за 6 месяцев. Единственная программа, где выпускники платят только за результат, то есть после трудоустройства. Никаких скрытых условий или кредитов. Первая зарплата от 100 000 рублей.

Пройти тестовое задание 🙋‍♂️👉 https://clck.ru/MEMG8

👇Что ждет студента:
1. Подготовка с личным ментором online по индивидуальной программе за 6 месяцев
2. Жесткий контроль знаний на каждом этапе
3. Обучение востребованному на рынке стеку технологий: Java Core, Maven, Git, Junit, Tomcat, Servlet, Spring MVC, Core, Security, Hibernate
4. Отработка знаний в настоящем бизнес проекте, который дает опыт и строчку для резюме
5. Поддержка и общение со студентами-разработчиками в групповом чате slack (уже более 1300 участников)
6. Быстрое карьерное и финансовое развитие за счет программы поддержки на 2 года: митапы, мастер-классы, закрытые лекции со спикерами и offline интенсивы

Требования к кандидату:

— Обучение минимум 25 часов в неделю
— Проживание или готовность к переезду в Москву для трудоустройства
To‘liq o‘qish
Java Interview Review 17 Feb, 18:01
Что такое функциональный интерфейс?

Так называется специальная разновидность интерфейса, который определяет тип-функцию, коллбэк.

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

Никаких других ограничений на метод не накладывается: он не ограничен в типах аргументов и возвращаемого значения, может иметь любое название и список выбрасываемых исключений (checked и unchecked).

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

Дополнительно функциональный интерфейс принято помечать аннотацией @FunctionalInterface. Наличие этой аннотации не необходимо, но оно даёт дополнительную валидацию: её присутствие на нефункциональном типе спровоцирует ошибку компиляции.

Типичные примеры функциональных интерфейсов: Callable, Supplier, Comparable.

#Язык
To‘liq o‘qish
Java Interview Review 14 Feb, 18:01
Какой у Spring бинов скоуп по умолчанию?

В Spring Framework во всех определениях бизнес-сущностей (bean) явно или неявно присутствует атрибут scope. В Java-конфигурации он передается в аннотации @Scope, в xml – в атрибуте scope тега .

Атрибут scope – это строка-идентификатор, которая ставит бину в соответствие экземпляр класса org.springframework.beans.factory.config.Scope. Скоуп – реализация паттерна «стратегия» для фабрик бинов, инструкция по созданию бизнес-объектов.

В простейшем Spring-приложении всегда существует два сокоупа:
singleton – объект создается однажды, при последующих внедрениях переиспользуется. Полезен для большинства случаев: различные сервисы, объекты без состояния, неизменяемые объекты. Стоит заметить, это не класс-синглтон: при объявлении двух бинов одного класса их экземпляров будет два. Это скоуп по умолчанию.
prototype – при каждом внедрении фабрика бинов создает новый объект. Нужен для изменяемых бинов с состоянием.

Spring Web добавляет 4 дополнительных скоупа, которые делают бин синглтоном в пределах обработки одного сетевого запроса (request), клиентской сессии (session), контекста сервлета (application) и вебсокет-сессии (websocket).

Разработчик может добавлять собственные скоупы. Пример реализации одного можно найти в самих исходниках Spring: SimpleThreadScope, который делает бин тред-локальным. Для использования его, как и пользовательские скоупы, нужно сначала зарегистрировать в BeanFactory.

#Spring
To‘liq o‘qish
Java Interview Review 13 Feb, 18:01
Бесплатный онлайн-практикум с Matvey Kukuy (USA, San Francisco). DevOps All stars: Мониторинг веб-проектов и инцидент-менеджмент

Регистрация - https://clck.ru/MCafA
*Количество мест строго ограничено!
**На прошлом занятии был превышен лимит по участникам. Успевайте.

Время проведения:
18 Февраля (Вторник) в 19:00 по МСК

Что будет на практикуме?

🔹Готовим окружение
- Запускаем подопытный проект в Docker
- Регистрируемся во всех сервисах
🔹Что и зачем измерять — смотрим на Site Reliability Engineering (SRE)
- Знакомимся с Service Level Agreement, Service Level Objective, Service Level Indicator
🔹Как измерять — рассматриваем типовые системы мониторинга
- Grafana
- Prometheus
- Alertmanager

Кто ведет?

Matvey Kukuy - Спикер конференций Agile Days, DevOpsConf, XP Days по темам, связанным с IT инцидентами, SRE, построением надежных систем. Генеральный директор Amixr Inc. (разработчик системы управления IT инцидентами Amixr.IO, резидент 500 StartUps San Francisco).
В прошлом: Разработчик в Kaspersky Lab, CTO агентства HuskyJam, Разработчик в Cisco (Silicon Valley), DevOps Engineer в Constructor (Silicon Valley). Окончил программу «Project Management For Innovation» в Stanford University.

Открытые еженедельные DevOps практикумы - https://bit.ly/2CGmm3C
Присоединяйтесь!
To‘liq o‘qish
Java Interview Review 12 Feb, 18:00
Что происходит внутри HashMap.put()? (2/2)

6. В случае, когда структурой была цепочка а не дерево, и длина цепочки превысила 7 элементов – происходит процедура treeification – превращение списка в самобалансирующееся дерево. В случае коллизии это ускоряет доступ к элементам на чтение с O(n) до O(log(n)). У comparable-ключей для балансировки используется их естественный порядок. Другие ключи балансируются по порядку имен их классов и значениям identityHashCode-ов. Для маленьких хэш-таблиц (< 64 бакетов) «одеревенение» заменяется увеличением (см. п.8).

7. Если новая нода попала в пустую ячейку, заняла новый бакет – увеличивается счетчик структурных модификаций. Изменение этого счетчика сообщит всем итераторам контейнера, что при следующем обращении они должны выбросить ConcurrentModificationException.

8. Когда количество занятых бакетов массива превысило пороговое (capacity * load factor), внутренний массив увеличивается вдвое, а для всего содержимого выполняется рехэш – все имеющиеся ноды перераспределяются по бакетам по тем же правилам, но уже с учетом нового размера.

#Коллекции
To‘liq o‘qish
Java Interview Review 11 Feb, 18:00
🔥19 февраля в 20:00 (мск) онлайн День открытых дверей курса
«Разработчик на Spring Framework».

Зарегистрируйтесь: https://otus.pw/Rh6X/

👉🏻А пока есть время до встречи – знакомьтесь с программой и проходите вступительный тест: https://otus.pw/hfrr/

📌Вас ждет знакомство с преподавателем курса, Юрием Дворжецким – автором обучающей программы, архитектором. Специалистом, которому по плечу разработка больших и маленьких проектов, высоконагруженных и очень красивых, многим известных и совсем специфических, а также тренером компании Luxoft.
📌Рассказ в деталях о курсе и формате обучения, программе трудоустройства и карьерных перспективах выпускников.

💣50% выпускников прошлых групп уже получили офферы от наших партнеров.
.
⚠️Присоединяйтесь и вы к числу успешных Java-Developers. Готовьте вопросы и задайте их лично преподавателю в прямом эфире.
To‘liq o‘qish
Java Interview Review 10 Feb, 18:01
Что происходит внутри HashMap.put()? (1/2)

Мы уже рассматривали хэш-таблицы в целом, теперь рассмотрим в деталях, как новые ключ и значение складываются в HashMap.

1. Вычисляется хэш ключа. Если ключ null, хэш считается равным 0. Чтобы достичь лучшего распределения, результат вызова hashCode() «перемешивается»: его старшие биты XOR-ятся на младшие.

2. Значения внутри хэш-таблицы хранятся в специальных структурах данных – нодах, в массиве. Из хэша высчитывается номер бакета – индекс для значения в этом массиве. Полученный хэш обрезается по текущей длине массива. Длина – всегда степень двойки, так что для скорости используется битовая операция &.

3. В бакете ищется нода. В ячейке массива лежит не просто одна нода, а связка всех нод, которые туда попали. Исполнение проходит по этой связке (цепочке или дереву), и ищет ноду с таким же ключом. Ключ сравнивается с имеющимися сначала на ==, затем на equals.

4. Если нода найдена – её значение просто заменяется новым. Работа метода на этом завершается.

5. Если ноды с таким же ключом в бакете пока нет – добавляемая пара ключ-значение запаковывается в новый объект типа Node, и прикрепляется к структуре существующих нод бакета. Ноды составляют структуру за счет того, что в ноде хранится ссылка на следующий элемент (для дерева – следующие элементы). Кроме самой пары и ссылок, чтобы потом не считать заново, записывается и хэш ключа.

#Коллекции
To‘liq o‘qish
Чем синхронный сервер отличается от асинхронного?

Вопрос может быть сформулирован как «сравните Jetty и Netty», или «зачем нужен Spring WebFlux».

Большинство современных Java web-серверов синхронные. Это значит, что для каждого пришедшего HTTP-запроса выделяется отдельный поток. Даже если такой поток переиспользуется с помощью пула, он остается занятым до конца обработка запроса.

Таким образом, если каждый запрос выполняется одну секунду, то при всего лишь 2000 запросов в секунду сервер расходует 2000 потоков. Потоки в ОС – ограниченный ресурс, и не важно как сконфигурирован ваш сервер – в какой-то момент производительность резко просядет.

Альтернативное решение – асинхронные сервера. В них для потоков обработки HTTP-запросов используется work stealing. В широком смысле, вызовы асинхронных функций не блокируют выполнение, а их результат вместо return value возвращается параметром коллбэка. В Java этот результат зачастую возвращается в виде объекта Future.

Чтобы вся обработка запроса стала действительно асинхронной, необходимо также избавиться от блокирующих операций. Иначе преимущество подхода с work stealing выродится в простой пул потоков. Блокирующая работа с файлами и сетью должна быть заменена на NIO, а для БД должен быть использован асинхронный драйвер.

#JavaEE
#Сеть
To‘liq o‘qish
Бесплатный онлайн практикум DevOps by REBRAIN: Деплой приложения в Kubernetes с помощью Helm

Регистрация - https://clck.ru/M9cgc
Количество мест строго ограничено!

Время проведения:
11 Февраля (Вторник) в 19:00 по МСК

Что будет на практикуме?

🔹Для чего нужен helm?
🔹Структура и правила оформления helm-chart'а
🔹Пример функционирующего чарта
🔹Tips & tricks

Кто ведет?

Юрий Медведев - Team Lead / DevOps engineer Fevlake. Выпускник REBRAIN. Спикер практикумов REBRAIN. Автор практикума для DevOps инженеров.

Открытые еженедельные DevOps практикумы - https://bit.ly/2CGmm3C
Присоединяйтесь!
To‘liq o‘qish
В чем разница между JavaEE, JavaSE и JavaME?

Как язык программирования, в рамках одной версии Java везде приблизительно одинаковая. С точки зрения платформы, существуют разные вариации:

• Standard Edition (SE) – основной набор.

• Enterprise Edition (EE) – стандартная версия, с дополнительными интерфейсами корпоративных web-технологий.

• Micro Edition (ME) – для платформ, сильно ограниченных в ресурсах. Интернет вещей, Raspberry PI, умные телевизоры. Если помните, игры для старых телефонов имели расширение .jar.

• Java Card – джава для банковских и SIM-карт. Подмножество основного языка, с урезанной библиотекой, измененным байткодом, и упором на безопасность. Когда в окне инсталлятора баннер заявляет «3 Billion Devices Run Java», в счёт идут и карточки.

• JavaFX – платформа для десктопных приложений, замена Swing. Сейчас живет как отдельный opensource-проект.

#Язык
To‘liq o‘qish
🇬🇧 Английский для разработчиков 🛠

Кто в международном IT более востребован, чем наши разработчики? Правильно! Наши разработчики, знающие английский.
Посредственный уровень английского - главная причина, почему талантливые специалисты не растут карьерно и по зарплате: будь то вакансия в международной компании или удаленка на западный рынок.

Надо учить английский. Однако репетитор или очередные курсы - это путь в никуда. Абстрактная грамматика, абстрактная лексика никак не помогут карьере в it.

Мы сделали онлайн интенсив для разработчиков. Их ведет преподаватель, ранее работавший продактом в стартапах Силиконовой Долины 🇺🇸

Интенсив поможет:
📌 Начать говорить на рабочие темы (it, разработка). Берем реальные ситуации: job interview, assessment, code review.
📌 Подготовить крутое CV, cover letter, оформить профили. Делаем вместе, привлекаем американских и европейских HR экспертов.
📌 Готовить профессиональный контент и строить личный бренд - на английском.
📌 Пополнить словарный запас - все из области it.

Занятия в группах по 4-5 человек (все разработчики) и очень много личного фидбека.
По результату - сертификат и четкий план построения личного бренда в англоязычной it среде.

Цена - 9 900 руб., но для наших подписчиков есть промо-код, чтобы купить еще дешевле: ITENG8700. Действует до конца недели. Цена адекватная, бессмысленный general english стоит дороже))

Чат в telegram для всех вопросов - https://t.me/polygled_it.
To‘liq o‘qish
Где у Java приложения точка входа?

В обычном Java приложении всегда должен быть main class, содержащий метод main. С него начинается исполнение всей программы. Main class-ом может быть не только класс, но и интерфейс или енам. Для JavaFX приложения главный класс должен реализовывать javafx.application.Application.

main обязательно public static. Дополнительно, методу разрешено иметь модификатор strictfp. На аннотации и список исключений ограничений не накладывается.

В главном методе должен быть объявлен единственный аргумент – массив строк. Обе конструкции String[] и String... компилируются в один и тот же байт-код, так что приемлемы оба варианта. Название массива может быть любым, а значение будет содержать аргументы командной строки.

Когда приложение запускается как classpath, главный класс передается параметром командной строки. Если выполняется единственный исходник, он и описывает main class.

Для исполняемого jar-файла (java -jar MyJar.jar), его главный класс должен быть указан в манифесте. Внутри архива, в файл META-INF/MANIFEST.MF добавляется строчка вида Main-Class: ru.itsobes.MyClass. Иначе запуск завершается ошибкой «no main manifest attribute».

В случае, когда в указанном главном классе не оказывается метода, который бы удовлетворял всем критериям главного метода, программа падает с ошибкой «Main method not found».

В апплетах вместо main входной точкой служат методы init и start. Начиная с версии Java 9 технология апплетов объявлена устаревшей, а с 11 – совсем удалена. Не будем останавливаться на них подробнее.

#Язык
To‘liq o‘qish
🍀Неизвестный Spring: быстрая разработка приложений🍀

Хотите детальнее узнать о возможностях быстрого создания современных приложений? Окунуться в альтернативный путь развития Spring. А может, вас интересует необычный мир Spring Roo?

10 февраля в 20:00 (мск) подключайтесь к практическому вебинару онлайн-курса «Разработчик на Spring Framework», который проведет преподаватель курса, Дмитрий Коган – специалист с более чем 10-летним стажем, который сейчас работает в немецком подразделении DXC.

👉🏻Пройдите тест и мы запишем вас на мероприятие: https://otus.pw/593i/
To‘liq o‘qish
Java Interview Review 31 Jan, 18:01
Как применяют технологию SPI (2/2)

Для получения провайдеров всех библиотек приложения используется класс ServiceLoader. Это итератор по сервис-провайдерам, а создается он статическим методом load, в который параметром передается интерфейс/абстрактный класс интересующего сервиса.

Доступ к файлам-ресурсам из classpath обеспечивается загрузчиком классов, поэтому дополнительно при загрузке можно указать специфический загрузчик. С появлением модульности в Java 9 можно также указать модуль.

SPI повсеместно используется в стандартной библиотеке JDK. С его помощью подключаются JDBC-драйверы. Через ServiceLoader также загружаются таймзоны, системные настройки, кодировки, провайдеры файловой системы и многое другое.

Пример реализации собственного SPI-сервиса можно найти в этой статье на хабре.

#Классы
To‘liq o‘qish
Java Interview Review 30 Jan, 18:01
Бесплатный онлайн практикум DevOps by REBRAIN: Docker

Регистрация - https://clck.ru/M6wyD
Количество мест строго ограничено!

Время проведения:
4 Февраля (Вторник) в 19:00 по МСК

Что будет на практикуме?

🔹Зачем нужен Docker? Обзор самых актуальных проблем. Как Docker их решает
🔹Обзор внутреннего устройства Docker (Контейнерная виртуализация/ Auths/ Docker registry
🔹Собираем и запускаем свой первый Docker контейнер
🔹Обзор систем оркестрации для Docker


Кто ведет?

Василий Озеров - основатель агентства Fevlake (fevlake.com) и действующий Devops-инженер (опыт в Devops более 5 лет). Регулярно выступает на RootConf, DevOpsConf Russia, HighLoad.

Открытые еженедельные DevOps практикумы - https://bit.ly/2CGmm3C
Присоединяйтесь!
To‘liq o‘qish
Java Interview Review 29 Jan, 18:01
Как применяют технологию SPI (1/2)

Service Provider Interface – технология из стандартной поставки JavaSE. Этой технологией реализуется IoC, не являющаяся при этом DI. С помощью SPI можно легко и без дополнительных инструментов поставлять конкретные реализации сервисов отдельными jar-файлами. Применение обычно похоже на механизм плагинов.

Два основных понятия SPI – это service и service provider. Service – интерфейс или абстрактный класс, который объявляет API требуемого сервиса, и предоставляется основным приложением. Service provider – реализация этого API, наследник класса/интерфейса сервиса, который динамически поставляется в основное приложение библиотекой-плагином. Для одного сервиса может быть предоставлено несколько провайдеров из одной или нескольких библиотек.

На интерфейс сервиса не накладывается никаких ограничений. Провайдер же обязан реализовывать этот интерфейс, и иметь конструктор без параметров. Внутри jar-файла в директории META-INF/services лежат текстовые файлы, где имя файла – полное имя сервиса, а его строчки – полные имена провайдеров этого сервиса, которые поставляются этой библиотекой.

#Классы
To‘liq o‘qish
Java Interview Review 27 Jan, 18:01
Что делает семафор?

Семафор – один из старейших примитивов синхронизации. Он был изобретен Дейкстрой в 1968 году. По большому счету это счетчик, который можно увеличивать и уменьшать из разных потоков. Уменьшение до 0 блокирует уменьшающий поток. Состояние, когда счетчик больше нуля называют сигнальное состояние, операцию его увеличения – release (освобождение) или signal, уменьшения – acquire (захват) или wait.

На практике можно представить, что release – выделение квоты доступа к критической секции программы. acquire – использование необходимого объема доступной квоты, или ожидание, если её не хватает. Подробнее с деталями работы семафора поможет ознакомиться перевод статьи с картинками на хабре.

В Java семафор реализован классом Semaphore. Состоит этот класс в основном из разных форм методов acquire (с таймаутом, с игнорированием InterruptedException, неблокирующий) и release. Методы могут принимать параметр permits – тот самый объем квот, которые необходимо освободить/захватить.

Несколько вспомогательных методов позволяют узнать больше о количестве и составе очереди потоков, которые ждут освобождения пермитов. А методы availablePermits и drainPermits позволяют узнать количество оставшихся пермитов, и захватить их все соответственно. В конструкторе конфигурируются изначальное количество пермитов, и свойство fair (аналогичное свойству ReentrantLock).

#Многопоточность
To‘liq o‘qish
Java Interview Review 24 Jan, 18:01
Как Spring Framework реализует паттерн Dependency Injection?

Инверсия контроля (inversion of control, IoC) – принцип проектирования, по которому контроль над потоком управления передается фреймворку. Управляющий и прикладной код разделяются. При разработке модуля этот подход избавляет от необходимости знать о других модулях программы и деталях их взаимодействия. Такой код становится более переипользуемым и модульным, уменьшает связность.

Внедрение зависимостей (Dependency Injection, DI) – одна из реализаций IoC. При взаимодействии с другими модулями, программа оперирует высокоуровневыми абстракциями, тогда как конкретная её реализация поставляется фреймворком.

Стандартная реализация DI – фреймворк инстанциирует все сервисы, и складывает их в IoC-контейнер. При этом специальная сущность, Service Locator, занимается поиском соответствия реализаций абстракциям и их внедрением.

Spring – большой набор различных библиотек. DI реализуется одной из основных библиотек – Spring IoC.

Сущности бизнес-логики в Spring, как и в JavaEE называются beans. Бины объявляются различными способами, корни большинства из них лежат в понятии Configuration. В качестве контейнера бинов выступает ApplicationContext. Чтобы передать инициализацию зависимости контексту, она помечается аннотацией @Autowired.

Лучше разобраться в понятиях экосистемы Spring поможет известный доклад Евгения Борисова «Spring-потрошитель»:часть 1,часть 2.

#Spring
To‘liq o‘qish