Java Guru πŸ€“
13.4K subscribers
938 photos
15 videos
793 links
Канал с вопросами ΠΈ Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ с собСсСдований!

По сотрудничСству ΠΈ Ρ€Π΅ΠΊΠ»Π°ΠΌΠ΅: @NadikaKir

Канал Π² ΠΏΠ΅Ρ€Π΅Ρ‡Π½Π΅ РКН: https://vk.cc/cJrSQZ

ΠœΡ‹ Π½Π° Π±ΠΈΡ€ΠΆΠ΅: telega.in/channels/javatasks/card?r=lcDuijdm
Download Telegram
Π§Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΎ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ?
πŸ‘14
Π§Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΎ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ?
Anonymous Quiz
6%
current version: 0.1a
67%
current version: 0.5b
5%
current version: 0.1a current version: 0.5b
21%
Ошибка компиляции
πŸ‘21
КакиС Π±Ρ‹Π²Π°ΡŽΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΠΎΠΉ Π² Java?

ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
Числа ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π² Java хранятся Π² дискрСтной ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° ΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ фиксированный объСм. Из этого Π²Ρ‹Ρ‚Π΅ΠΊΠ°Π΅Ρ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Когда Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ арифмСтичСской ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Ρ‹ΠΏΠ°Π΄Π°Π΅Ρ‚ ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ΄Π΅Ρ‚ ΠΏΠΎ ΠΊΡ€ΡƒΠ³Ρƒ – максимальноС становится ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ, Π»ΠΈΠ±ΠΎ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚. Вакая ситуация называСтся ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ (underflow/overflow).

РСшСниС: Ссли ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ пСрСполнСния Π·Π½Π°Ρ‡ΠΈΠΌΠ°, ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ с суффиксом *Exact ΠΈΠ· классС Math. Π­Ρ‚ΠΎ бСзопасныС Π°Π½Π°Π»ΠΎΠ³ΠΈ арифмСтичСских ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ€ΠΎΡΠ°ΡŽΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π² случаС пСрСполнСния.

ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎ-зависимыС округлСния.
По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ JVM ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ арифмСтичСскиС вычислСния насколько это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ. ΠŸΡ€Π΅Π΄Π΅Π»Ρ‹ точности ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ обСспСчСния. Π­Ρ‚ΠΎ Π½Π΅ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎ для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΡ€Π΅Π΄ΡŠΡΠ²Π»ΡΡŽΡ‚ строгиС трСбования пСрСносимости, ΠΊΠΎΠ³Π΄Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ вычислСний Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ Π½Π° любом ΠΆΠ΅Π»Π΅Π·Π΅.

РСшСниС: ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ strictfp Π² объявлСнии класса ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ вычислСний ΠΊ Π΅Π΄ΠΈΠ½ΠΎΠΉ спСцификации IEEE 754. Π—Π° это ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡ…ΡƒΠ΄ΡˆΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒΡΡ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

ArithmeticException.
ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. Π­Ρ‚ΠΎ происходит, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π½Π° ноль. Π­Ρ‚ΠΎ ΠΆΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π±Ρ€ΠΎΡΠ°ΡŽΡ‚ бСзопасныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈΠ· Math.

РСшСниС: Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ. Π›ΡƒΡ‡ΡˆΠΈΠΉ способ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ логичСскиС ошибки – ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΊΠΎΠ΄ Unit-тСстами.
πŸ‘18πŸ”₯2⚑1
Какой Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹?
πŸ‘12
Какой Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹?
Anonymous Quiz
44%
1 2
2%
2 1
4%
Ошибка Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния
50%
Ошибка компиляции
πŸ‘30
ΠžΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Π»ΠΈ сокращСнныС ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹?

Java ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ программисту ΡΠΎΠΊΡ€Π°Ρ‰Π΅Π½Π½ΡƒΡŽ запись для примСнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с сохранСниСм ΠΎΡ‚Π²Π΅Ρ‚Π° Π² ΠΎΠΏΠ΅Ρ€Π°Π½Π΄. Π­Ρ‚ΠΎ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ +=, &=, ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅. Π˜Ρ… ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ – ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ слоТного присваивания (compound assignment). Π‘ΠΎΠΊΡ€Π°Ρ‰Π΅Π½Π½Ρ‹Π΅ вСрсии Π΅ΡΡ‚ΡŒ для всСх арифмСтичСских ΠΈ Π±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ².

Π£ Ρ‚Π°ΠΊΠΈΡ… сокращСний Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎ Π½Π΅ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΏΠΎΠ»Π½Ρ‹Ρ… вСрсий. Если ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ, Ρ‚Π°ΠΌ сказано, Ρ‡Ρ‚ΠΎ x += y – это Π½Π° самом Π΄Π΅Π»Π΅ сокращСниС ΠΎΡ‚ x = (XType)(x + y). Π’ΠΎ Π΅ΡΡ‚ΡŒ, ΠΊΡ€ΠΎΠΌΠ΅ самой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ происходит ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΊ Ρ‚ΠΈΠΏΡƒ Π»Π΅Π²ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°.

НСзнаниС этой особСнности ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ компиляции, ΠΈ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠΎΠ΄Π° (ΠΊΠ°ΠΊ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ).
πŸ‘49πŸ”₯8🌚1
Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ случайноС число Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅

Когда ΠΌΡ‹ сталкиваСмся со случайными числами, Ρ‚ΠΎ всСгда Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΎ вопросС ΠΈΡ… распрСдСлСния. НС Π±ΡƒΠ΄Π΅ΠΌ здСсь ΡƒΠ³Π»ΡƒΠ±Π»ΡΡ‚ΡŒΡΡ Π² Ρ‚Π΅ΠΎΡ€ΠΈΡŽ ΠΌΠ°Ρ‚. статистики, Π° рассмотрим Ρ‚ΠΎΠ»ΡŒΠΊΠΎ практичСскиС слСдствия.

Π‘Π°ΠΌΡ‹Π΅ стандартныС классы-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ случайных чисСл ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎ распрСдСлСнныС значСния. Π›ΡŽΠ±ΠΎΠ΅ число Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒΡŽ – это ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° Π·Π°Π΄Π°Ρ‡. НапримСр, ΠΌΠ΅Ρ‚ΠΎΠ΄ Random.nextInt(1) Π±ΡƒΠ΄Π΅Ρ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ количСство Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ 0 ΠΈ 1.

Однако, программист Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ "ΠΈΡΠΏΠΎΡ€Ρ‚ΠΈΡ‚ΡŒ" Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ опСрациями. Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ вмСсто ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Random.nextInt(2)%2. Вакая конструкция Ρ‚ΠΎΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ 0 ΠΈΠ»ΠΈ 1. Однако, Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°, 2, Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎΠΆΠ΅ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π΅Π½ΠΎ Π² 0. Π—Π½Π°Ρ‡ΠΈΡ‚, ΠΎΡ‚Π²Π΅Ρ‚ 0 Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ Π² Π΄Π²Π° Ρ€Π°Π·Π° Ρ‡Π°Ρ‰Π΅ Ρ‡Π΅ΠΌ 1.

Π­Ρ‚ΠΎ Ρ‚Π° ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π»ΡƒΡ‡ΡˆΠ΅ Π½Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ общСпринятым Β«ΡˆΠΊΠΎΠ»ΡŒΠ½Ρ‹ΠΌΒ» арифмСтичСским ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° %. ВмСсто этого слСдуСт ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π·Π°Π±ΠΎΡ‚Ρƒ ΠΎ распрСдСлСнии Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ с Π³Ρ€Π°Π½ΠΈΡ†Π°ΠΌΠΈ.

Если Π·Π°Π΄Π°Ρ‡Π° ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ ΠΏΠ»ΠΎΡ‚Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ с распрСдСлСниями, стоит Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ спСциализированной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ Π²Ρ€ΠΎΠ΄Π΅ Apache Commons Math.
πŸ‘22πŸ”₯3
Π›ΠΈΡˆΠ°Π΅Ρ‚ Π»ΠΈ var строгой Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ?

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово var появилось Π² Java 10. Π£ΠΊΠ°Π·Π°Π½ΠΈΠ΅ var вмСсто Ρ‚ΠΈΠΏΠ° локальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ примСняСт ΠΊ Π½Π΅ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‚ΠΈΠΏΠΎΠ² (type inference). Π’ΠΈΠΏ Π±ΡƒΠ΄Π΅Ρ‚ вычислСн Π½Π° этапС компиляции ΠΈΠ· Ρ‚ΠΎΠ³ΠΎ, Ρ‡Π΅ΠΌ пСрСмСнная инициализируСтся.

ΠžΡ‚ΡΡŽΠ΄Π° нСсколько Π²Ρ‹Π²ΠΎΠ΄ΠΎΠ². Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ var Π² полях класса, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΈ Π³Π΄Π΅-Π»ΠΈΠ±ΠΎ Π΅Ρ‰Π΅ ΠΊΡ€ΠΎΠΌΠ΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, обязана Π±Ρ‹Ρ‚ΡŒ инициализация с понятным Ρ‚ΠΈΠΏΠΎΠΌ – Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ var x; ΠΈΠ»ΠΈ var x = null; Π½Π΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ.

И Π³Π»Π°Π²Π½ΠΎΠ΅ слСдствиС – ΠΊ ΠΊΠΎΠ½Ρ†Ρƒ компиляции Ρƒ Ρ‚Π°ΠΊΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… фиксированный ΠΈ извСстный Ρ‚ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ ΠΏΠΎΠ·Π΄Π½Π΅Π΅. А это ΠΈ Π΅ΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ строгой Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ.

ΠžΡ‚Π²Π΅Ρ‚: Π½Π΅Ρ‚, Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ Ρ‚ΠΈΠΏ – строгий. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, типизация остаСтся статичСской.

Π“Π»Π°Π²Π½ΠΎΠ΅ ΡƒΠΏΡƒΡ‰Π΅Π½ΠΈΠ΅ – Π² ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ diamond operator. Π’ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²Π°Ρ… Π² Π½Ρ‘ΠΌ вывСдСтся ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ generic-Ρ‚ΠΈΠΏ, Π½ΠΎ Π² случаС var ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ нСдостаточно, ΠΈ Ρ‚ΠΈΠΏΠΎΠΌ-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Object.
πŸ”₯14πŸ‘4❀1
Как ΠΈΠ½ΡΡ‚Π°Π½Ρ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ экзСмпляр generic Ρ‚ΠΈΠΏΠ°?

Π’Π½ΡƒΡ‚Ρ€ΠΈ класса class Foo<T> Π½Π° generic ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ T Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€: нСльзя Π²Π·ΡΡ‚ΡŒ Π΅Π³ΠΎ .class, нСльзя ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² instanceof. Π’Π°ΠΊΠΆΠ΅ ΠΈ Π²Ρ‹Π·ΠΎΠ² Π½Π° Π½Π΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° new ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС.

ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° этих ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ кроСтся Π² стирании Ρ‚ΠΈΠΏΠΎΠ². Π”ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ скорСС ΠΊΠ°ΠΊ ограничСния Ρ‚ΠΈΠΏΠΎΠ², Ρ‡Π΅ΠΌ ΠΊΠ°ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹. Π­Ρ‚ΠΈ ограничСния Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ для Π±ΠΎΠ»Π΅Π΅ строгих ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ Π½Π° этапС компиляции. Π’ Ρ€Π°Π½Ρ‚Π°ΠΉΠΌΠ΅ ΠΆΠ΅ информация ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ°Ρ…-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… стираСтся. А всС эти ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² Ρ€Π°Π½Ρ‚Π°ΠΉΠΌΠ΅.

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ простой способ дСйствия здСсь – ΠΊΡ€ΠΎΠΌΠ΅ значСния Ρ‚ΠΈΠΏΠ° T ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π΅Ρ‰Π΅ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-дСскриптор для этого Ρ‚ΠΈΠΏΠ°, экзСмпляр класса Class<T>. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ создан ΠΈΠ· дСскриптора Ρ€Π΅Ρ„Π»Π΅ΠΊΡˆΠ΅Π½ΠΎΠΌ.

Но сущСствуСт ΠΎΠ΄ΠΈΠ½ Ρ…Π°ΠΊ, способный ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡ со стираниСм Ρ‚ΠΈΠΏΠΎΠ². Π’ΠΈΠΏ-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ всС-Ρ‚Π°ΠΊΠΈ остаСтся Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС Π² Ρ€Π°Π½Ρ‚Π°ΠΉΠΌΠ΅. ΠœΠ΅Ρ‚ΠΎΠ΄ мСтакласса наслСдника ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ²ΡˆΠ΅Π³ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ getGenericSuperclass() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ.
πŸ‘18
Π§Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ArrayStoreException?

Π­Ρ‚ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎΠΏΡ‹Ρ‚Π°Π»Π°ΡΡŒ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² массив Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. Вакая ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° становится Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·-Π·Π° ковариантности массивов.

ΠšΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ позволяСт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с массивом ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ массива Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ. НапримСр, Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊ Object[] ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ любой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² любой массив:

 Object x[] = new String[3];
x[0] = new Integer(0);

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π±Π΅Ρ€Π΅Ρ‚Π΅ элСмСнт ΠΈΠ· массива, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ прСдставитСлСм Ρ‚ΠΈΠΏΠ° элСмСнтов самого этого массива. НС Π²Π°ΠΆΠ½ΠΎ ΠΊΠ°ΠΊΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° пСрСмСнная Π΅Π³ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚. ИмСнно для обСспСчСния этой Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΈΠΏΠ° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния, которая ΠΈ выбрасываСт ArrayStoreException.

Битуация ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ heap pollution Π² случаС Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ². Волько для этого случая такая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Ρ€Π΅ΠΆΠ΅, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° этапа компиляции:

// Ошибка компиляции – Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½Ρ‹!
List<Object> x = new ArrayList<String>();
πŸ‘18
Как ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ upcasting Ρ‚ΠΈΠΏΠ°-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°?

Π—Π°Π΄Π°Ρ‡Π°: Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ этому ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ²:

<T> void pair(T a, T b) {}

Π’ΠΎ Π΅ΡΡ‚ΡŒ, Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ pair(Foo, Foo), Π½ΠΎ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ pair(Foo, Bar).

Upcasting – ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊ Ρ‚ΠΈΠΏΡƒ-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŽ. String β†’ Object, Integer β†’ Number.

Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ Π»ΡŽΠ±Ρ‹Ρ… Π΄Π²ΡƒΡ… классов Π΅ΡΡ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠΉ ΠΏΡ€Π΅Π΄ΠΎΠΊ: ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Object. Если Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ String ΠΈ Boolean – согласно ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ вычислСния Ρ‚ΠΈΠΏΠ°-Π³Ρ€Π°Π½ΠΈΡ†Ρ‹, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ T Π±ΡƒΠ΄Π΅Ρ‚ стСрт Π² Object.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ super Ρ‚ΠΎΠΆΠ΅ Π½Π΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚: для этого Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ Π·Π°Ρ€Π°Π½Π΅Π΅, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΈΠΏ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΡΡ.

Ѐокус Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π° этапС компиляции это Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ любого Ρ‚ΠΈΠΏΠ° всСгда являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Ρ‚ΠΈΠΏΠ°-родитСля (ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ is a). Π­Ρ‚ΠΎ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ООП, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Ρ€ΡƒΡˆΠΈΡ‚ΡŒ. К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π°Ρ€ΡƒΡˆΠ°Π» Π±Ρ‹ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ подстановки Лисков.

ЕдинствСнная Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ³ΠΎ повСдСния – с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ getClass() ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ классы ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² Ρ€Π°Π½Ρ‚Π°ΠΉΠΌΠ΅.
πŸ‘11❀3⚑1
Как 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.
πŸ‘18😐4πŸ₯΄2❀1
Какой Ρƒ Spring Π±ΠΈΠ½ΠΎΠ² скоуп ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ?

Π’ Spring Framework Π²ΠΎ всСх опрСдСлСниях бизнСс-сущностСй (bean) явно ΠΈΠ»ΠΈ нСявно присутствуСт Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ scope. Π’ Java-ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΎΠ½ пСрСдаСтся Π² Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ @Scope, Π² xml – Π² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π΅ scope Ρ‚Π΅Π³Π° <bean>.

Атрибут scope – это строка-ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, которая ставит Π±ΠΈΠ½Ρƒ Π² соотвСтствиС экзСмпляр класса org.springframework.beans.factory.config.Scope. Π‘ΠΊΠΎΡƒΠΏ – рСализация ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π° «стратСгия» для Ρ„Π°Π±Ρ€ΠΈΠΊ Π±ΠΈΠ½ΠΎΠ², инструкция ΠΏΠΎ созданию бизнСс-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

Π’ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΌ Spring-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ всСгда сущСствуСт Π΄Π²Π° сокоупа:
β€’ singleton – ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ создаСтся ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ‹, ΠΏΡ€ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… внСдрСниях ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ. ПолСзСн для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° случаСв: Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ сСрвисы, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π±Π΅Π· состояния, нСизмСняСмыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Π‘Ρ‚ΠΎΠΈΡ‚ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, это Π½Π΅ класс-синглтон: ΠΏΡ€ΠΈ объявлСнии Π΄Π²ΡƒΡ… Π±ΠΈΠ½ΠΎΠ² ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса ΠΈΡ… экзСмпляров Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π²Π°. Π­Ρ‚ΠΎ скоуп ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.
β€’ prototype – ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠΈ Ρ„Π°Π±Ρ€ΠΈΠΊΠ° Π±ΠΈΠ½ΠΎΠ² создаСт Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. НуТСн для измСняСмых Π±ΠΈΠ½ΠΎΠ² с состояниСм.

Spring Web добавляСт 4 Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… скоупа, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ Π±ΠΈΠ½ синглтоном Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ сСтСвого запроса (request), клиСнтской сСссии (session), контСкста сСрвлСта (application) ΠΈ вСбсокСт-сСссии (websocket).

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ собствСнныС скоупы. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² самих исходниках Spring: SimpleThreadScope, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π΅Π»Π°Π΅Ρ‚ Π±ΠΈΠ½ Ρ‚Ρ€Π΅Π΄-Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ. Для использования Π΅Π³ΠΎ, ΠΊΠ°ΠΊ ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ скоупы, Π½ΡƒΠΆΠ½ΠΎ сначала Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² BeanFactory.
πŸ‘16❀2
Π’ΠΈΠΌΠ»ΠΈΠ΄ Π² ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° Java

Π“ΠΈΠ±Ρ€ΠΈΠ΄Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π² Π³ΠΎΡ€ΠΎΠ΄Π°Ρ… Π Π€, Π‘Π΅Ρ€Π±ΠΈΠΈ, ΠšΠ°Π·Π°Ρ…ΡΡ‚Π°Π½Π°, АрмСнии, БСларуси.

Π˜Π½Ρ„Ρ€Π°ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ЯндСкса β€” это Π½Π°Π±ΠΎΡ€ сСрвисных ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ², Π½Π° основС ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… строится runtime ΠΎΠ±Π»Π°ΠΊΠ°, Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°, систСмы ΠΎΡ„Π»Π°ΠΉΠ½-вычислСний ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ. ВсС ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Ρ‹ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Ρ‹ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π½ΠΎΠΉ, рСсурсной ΠΈ Ρ€ΠΎΠ»Π΅Π²ΠΎΠΉ модСлью β€” это позволяСт быстрСС Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹ ΠΈ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ…. Наша ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ сСрвисы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ эти ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ ΡΠ²ΡΠ·Ρ‹Π²Π°ΡŽΡ‚ всю инфраструктуру Π²ΠΎΠ΅Π΄ΠΈΠ½ΠΎ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ рСсурсы ΠΏΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌ, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΊ Π½ΠΈΠΌ доступы.

Π˜Ρ‰Π΅ΠΌ ΠΎΠΏΡ‹Ρ‚Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΌΠ»ΠΈΠ΄Π° Π² ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° Java, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ систСмы, Π±ΡƒΠ΄Π΅Ρ‚ Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ, Π½Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Ρ… ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΎΠ² ΠΈ Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡ….

Наш стСк: Java 11, Spring Boot, Reactor, HTTP ΠΈ gRPC API, Kotlin, PostgreSQL.

ΠœΡ‹ ΠΆΠ΄Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹:
- Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»ΠΈ Π½Π° Java большС Ρ‚Ρ€Π΅Ρ… Π»Π΅Ρ‚;
- ΠΏΠΈΡˆΠ΅Ρ‚Π΅ эффСктивный ΠΈ понятный ΠΊΠΎΠ΄;
- управляли ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ; Π½Π°Π½ΠΈΠΌΠ°Π»ΠΈ людСй ΠΈ Π·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ²;
- ΠΌΠΎΠΆΠ΅Ρ‚Π΅ вСсти Π·Π° собой ΠΌΠ»Π°Π΄ΡˆΠΈΡ… участников ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π΄Π΅Π»ΠΈΡ‚ΡŒΡΡ с Π½ΠΈΠΌΠΈ знаниями ΠΈ ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ;
- Π·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ устроСны Π²Π΅Π±-сСрвисы;
- Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ с рСляционными ΠΈ нСрСляционными Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅ ΠΈΡ… устройство, *nix-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌΠΈ ОБ.
- Π·Π½Π°Π΅Ρ‚Π΅ популярныС Java-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ (Spring Boot, jUnit, Netty, Reactor);

Условия:
- сильная ΠΊΠΎΠΌΠ°Π½Π΄Π°, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ расти;
- Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π° Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Ρ€Ρ‹Π½ΠΊΠ° ΠΈ Π²Ρ‹ΡˆΠ΅;
- ΠΏΡ€Π΅ΠΌΠΈΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ ΠΏΠΎΠ»Π³ΠΎΠ΄Π° для всСх, ΠΊΡ‚ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΏΡ€ΠΎΡˆΡ‘Π» Ρ€Π΅Π²ΡŒΡŽ;
- Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π”ΠœΠ‘: ΠΎΠΏΠ»Π°Ρ‚Π° 80% стоимости Π”ΠœΠ‘ для супругов ΠΈ Π΄Π΅Ρ‚Π΅ΠΉ;
- Π³ΠΈΠ±ΠΊΠΈΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊ Ρ€Π°Π±ΠΎΡ‚Ρ‹.

ΠžΡ‚ΠΊΠ»ΠΈΠΊΠ½ΡƒΡ‚ΡŒΡΡ: https://goo.su/hlTfAB  ΠΈΠ»ΠΈ Π² Π’Π“: @Karm_Anna
πŸ‘4❀1
КакиС отличия ΠΌΠ΅ΠΆΠ΄Ρƒ @⁠Component, @⁠Service, @⁠Repository ΠΈ @⁠Controller?

@Component – простой способ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ объявлСниС класса объявлСниСм Spring-Π±ΠΈΠ½Π°. Из всСх ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΏΠ°Π»ΠΈ Π² сканированиС (ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π·Π½Π°Π΅Ρ‚ @ComponentScan), Π±ΡƒΠ΄ΡƒΡ‚ созданы Π±ΠΈΠ½-Π΄Π΅Ρ„ΠΈΠ½ΠΈΡˆΠ½Ρ‹.

ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ – это алиасы Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ
@Component. Π‘Π°ΠΌΠΈ ΠΏΠΎ сСбС ΠΎΠ½ΠΈ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ повСдСния, ΠΈ тСхничСски Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ядра Spring Framework Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Ρ‚Π°ΠΊ ΠΆΠ΅.

Π­Ρ‚ΠΈ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Β«Stereotype annotationsΒ». Π˜Ρ… Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ – сСмантика, логичСская Ρ€ΠΎΠ»ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²:
β€’ @⁠Service – рСализация бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ;
β€’ @⁠Repository – Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π΄Π°Π½Π½Ρ‹Ρ…: Β«Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉΒ» ΠΈΠ· Domain-Driven Design ΠΈΠ»ΠΈ классичСский DAO;
β€’ @⁠Controller – ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π²Π΅Π±-запросов (ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹
@RequestMapping)

Π‘Ρ‚ΠΎΡ€ΠΎΠ½Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ этой сСмантикой. НапримСр, трансляция ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Persistence API Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ… стСрСотипа
@Repository. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… случаях ΠΊΡ€ΠΎΠΌΠ΅ сСмантики ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ.
πŸ‘21
КакиС Π·Π°Π΄Π°Ρ‡ΠΈ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Spring Data?

Π­Ρ‚ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с систСмами доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ: рСляционными ΠΈ нСрСляционными Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, map-reduce Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°ΠΌΠΈ ΠΈ ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹ΠΌΠΈ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°ΠΌΠΈ. Π¦Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Π°Ρ концСпция ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° – Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΈΠ· ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π΄ΠΈΠ·Π°ΠΉΠ½Π° (Domain-driven design, DDD).

Spring Data состоит ΠΈΠ· мноТСства ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ для Ρ€Π°Π·Π½Ρ‹Ρ… случаСв ΠΆΠΈΠ·Π½ΠΈ. Π’ΠΎΡ‚ самыС популярныС ΠΈΠ· Π½ΠΈΡ…:

β€’ Spring Data JPA – Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ Java Persistence API, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Hibernate.
β€’ Spring Data JDBC – Π±ΠΎΠ»Π΅Π΅ простой ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ‡Π΅ΠΌ JPA Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ для JDBC-Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ².
β€’ Spring Data REST – созданиС Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… hypermedia-driven RESTful сСрвисов Π½Π° основС Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π².
β€’ Spring Data KeyValue – Ρ€Π°Π±ΠΎΡ‚Π° с Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°ΠΌΠΈ Ρ‚ΠΈΠΏΠ° ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.
β€’ Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰: MongoDB, Redis, Cassandra, LDAP, ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ….
πŸ‘27
Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Spring Data

Основная Ρ‡Π°ΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² Spring Data строится Π²ΠΎΠΊΡ€ΡƒΠ³ интСрфСйса Repository. Π­Ρ‚ΠΎ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π½Ρ‹ΠΉ интСрфСйс. ΠžΡ‚ Π½Π΅Π³ΠΎ Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ интСрфСйсы-спСциализации, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΆΠ΅ содСрТат ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с сущностями Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. ВсС эти интСрфСйсы ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΡƒΡŽΡ‚ΡΡ двумя Ρ‚ΠΈΠΏΠ°ΠΌΠΈ: самой сущности ΠΈ Π΅Ρ‘ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°.

CrudRepository – Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ сущностями: созданиС, Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ (CRUD).

PagingAndSortingRepository – добавляСт ΠΊ CRUD Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ постраничной Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ сортировкой.

JpaRepository – Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ PagingAndSortingRepository, ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅Π΅ Java Persistence API. ДобавляСт ряд ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ flush ΠΈ deleteInBatch.

MongoRepository – Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ PagingAndSortingRepository, спСцифичноС для MongoDB.

Π’ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, спСцифичныС для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ интСрфСйсы-наслСдники. ΠžΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡΡΡŒ Π½Π° ΠΈΠΌΠ΅Π½Π°Ρ… добавляСмых ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ сам создаёт ΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ.
πŸ‘10πŸ”₯6❀1
Π§Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅, ArrayList ΠΈΠ»ΠΈ LinkedList?

Π‘Π°ΠΌΡ‹ΠΉ ΠΈΠ·Π±ΠΈΡ‚Ρ‹ΠΉ вопрос. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚ Π·Π½Π°Π½ΠΈΠ΅ особСнностСй Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ (кишки ArrayList, кишки LinkedList) ΠΈ эффСктивности ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π² этих Ρ€Π°Π·Π½Ρ‹Ρ… рСализациях. Π’ вопрос ΠΈΠ½ΠΎΠ³Π΄Π° Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ Vector – пСрСсинхронизированный ΠΈ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ArrayList, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π»ΡƒΡ‡ΡˆΠ΅ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Collections.synchronizedList().

ArrayList Ρ…Ρ€Π°Π½ΠΈΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ Π² массивС, LinkedList Π² двусвязном спискС. Из этого Π²Ρ‹Ρ‚Π΅ΠΊΠ°Π΅Ρ‚ Ρ€Π°Π·Π½ΠΈΡ†Π° Π² эффСктивности Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ: ArrayList Π»ΡƒΡ‡ΡˆΠ΅ справляСтся с измСнСниями Π² сСрСдинС ΠΈ ростом Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… capacity, LinkedList – Π½Π° краях. Π’ Ρ†Π΅Π»ΠΎΠΌ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ArrayList Π»ΡƒΡ‡ΡˆΠ΅.

Π‘Ρ‚ΠΎΠΈΡ‚ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π° краях Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для этого спроСктированного интСрфСйса Deque: Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠ»ΡŒΡ†Π΅Π²ΠΎΠΉ Π±ΡƒΡ„Π΅Ρ€ ArrayDeque.
πŸ‘34🀣3πŸ”₯2
Каким Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ компиляции ΠΈ выполнСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°?
πŸ‘10