#CompletableFuture #Thread #Future #ThreadSafe
Π‘ΠΊΠΎΠ»ΡΠΊΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΎΠΆΠΈΠ΄Π°ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Thread ΠΏΠΎΡΠΎΠΊΠ°?
Π Π΅ΡΠ»ΠΈ ΡΡΠΎ-ΡΠΎ ΡΠΏΠ°Π»ΠΎ ΠΏΠΎ Π΄ΠΎΡΠΎΠ³Π΅ ΠΈ Π³Π΄Π΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ?
Π§ΡΠΎΠ±Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΎΡΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ΅ΡΠ²ΠΈΡΠ° Π½Π° Π±Π°Π·Π΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΠΈ Π½Π΅ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΠ»ΠΎΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΠΊΠΎΠ»Ρ ΠΎΠ·Π½ΡΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ ΠΎΡΠ»ΠΎΠ²ΠΊΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ - ΡΠ΄ΠΎΠ±Π½Π΅Π΅ ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½Π΅Π΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ CompletableFuture.
Π CompletableFuture ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΈΡΠ°ΡΡ Π·Π΄Π΅ΡΡ - https://annimon.com/article/3462.
ΠΠ° Π΄Π°Π½Π½ΠΎΠΌ ΠΆΠ΅ ΠΊΡΡΠΊΠ΅ ΠΊΠΎΠ΄Π° ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°ΡΡΡΡ CompletableFuture Π·Π°Π΄Π°ΡΠΈ (ΡΡΡΠΎΠΊΠ° 53) ΠΈ ΠΊΠ°ΠΊ ΡΡΠΈ ΠΆΠ΅ Π·Π°Π΄Π°ΡΠΈ ΠΎΡΠ΄Π°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ "Π½Π΅ΠΎΡΡ ΠΎΠ΄Ρ ΠΎΡ ΠΊΠ°ΡΡΡ" (ΡΡΡΠΎΠΊΠ° 59) Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° get().
ΠΠΎΠ΄ Π·Π°Π΄Π°ΡΠ°ΠΌΠΈ Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡΡΡ Runnable, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°Π³Π»Π°ΡΡΠ²Π°ΡΡ ΡΠ²ΠΎΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΏΠΎΡΠΎΠΊΠ° ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ Π΄Π°Π½Π½ΡΡ Π² ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈ ΠΏΠΎ ΡΠ΄ΡΠ°ΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°.
Π‘ΠΊΠΎΠ»ΡΠΊΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΎΠΆΠΈΠ΄Π°ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Thread ΠΏΠΎΡΠΎΠΊΠ°?
Π Π΅ΡΠ»ΠΈ ΡΡΠΎ-ΡΠΎ ΡΠΏΠ°Π»ΠΎ ΠΏΠΎ Π΄ΠΎΡΠΎΠ³Π΅ ΠΈ Π³Π΄Π΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ?
Π§ΡΠΎΠ±Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΎΡΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ΅ΡΠ²ΠΈΡΠ° Π½Π° Π±Π°Π·Π΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΠΈ Π½Π΅ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΠ»ΠΎΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΠΊΠΎΠ»Ρ ΠΎΠ·Π½ΡΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ ΠΎΡΠ»ΠΎΠ²ΠΊΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ - ΡΠ΄ΠΎΠ±Π½Π΅Π΅ ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½Π΅Π΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ CompletableFuture.
Π CompletableFuture ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΈΡΠ°ΡΡ Π·Π΄Π΅ΡΡ - https://annimon.com/article/3462.
ΠΠ° Π΄Π°Π½Π½ΠΎΠΌ ΠΆΠ΅ ΠΊΡΡΠΊΠ΅ ΠΊΠΎΠ΄Π° ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°ΡΡΡΡ CompletableFuture Π·Π°Π΄Π°ΡΠΈ (ΡΡΡΠΎΠΊΠ° 53) ΠΈ ΠΊΠ°ΠΊ ΡΡΠΈ ΠΆΠ΅ Π·Π°Π΄Π°ΡΠΈ ΠΎΡΠ΄Π°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ "Π½Π΅ΠΎΡΡ ΠΎΠ΄Ρ ΠΎΡ ΠΊΠ°ΡΡΡ" (ΡΡΡΠΎΠΊΠ° 59) Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° get().
ΠΠΎΠ΄ Π·Π°Π΄Π°ΡΠ°ΠΌΠΈ Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡΡΡ Runnable, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°Π³Π»Π°ΡΡΠ²Π°ΡΡ ΡΠ²ΠΎΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΏΠΎΡΠΎΠΊΠ° ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ Π΄Π°Π½Π½ΡΡ Π² ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈ ΠΏΠΎ ΡΠ΄ΡΠ°ΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°.
#Component #Repository #Service #Spring
ΠΠ°ΠΊΡΡ Spring Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π°Π΄ ΠΊΠ»Π°ΡΡΠΎΠΌ, @Component ΠΈΠ»ΠΈ @Repository? Π ΠΌΠΎΠΆΠ΅Ρ ΠΈ @Service?
Π‘ΡΠ°ΡΡΡ Π΄Π»Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΡΠ°Π·Π½ΠΈΡΡ Π½Π° ΡΠ΅ΠΌΡ:
https://coderlessons.com/articles/java/raznitsa-mezhdu-component-service-controller-i-repository-v-spring
Π ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΈΠ· ΡΠΊΡΠΈΠ½ΡΠΎΡΠ° Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ @Repository ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Spring Π½Π° ΡΠΎ, ΡΡΠΎ ΡΡΠΎ ΠΊΠ»Π°ΡΡ ΠΏΠ΅ΡΡΠΈΡΡΠ΅Π½ΡΠ½ΠΎΠ³ΠΎ ΡΠ»ΠΎΡ.
Π Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ ΡΡΠ½ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ - ΡΠ»ΡΠΆΠΈΡ ΠΎΡΠ½ΠΎΠ²ΠΎΠΉ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈ Π²ΡΠ·ΠΎΠ²Π° ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ².
ΠΠ°ΠΊΡΡ Spring Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π°Π΄ ΠΊΠ»Π°ΡΡΠΎΠΌ, @Component ΠΈΠ»ΠΈ @Repository? Π ΠΌΠΎΠΆΠ΅Ρ ΠΈ @Service?
Π‘ΡΠ°ΡΡΡ Π΄Π»Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΡΠ°Π·Π½ΠΈΡΡ Π½Π° ΡΠ΅ΠΌΡ:
https://coderlessons.com/articles/java/raznitsa-mezhdu-component-service-controller-i-repository-v-spring
Π ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΈΠ· ΡΠΊΡΠΈΠ½ΡΠΎΡΠ° Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ @Repository ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Spring Π½Π° ΡΠΎ, ΡΡΠΎ ΡΡΠΎ ΠΊΠ»Π°ΡΡ ΠΏΠ΅ΡΡΠΈΡΡΠ΅Π½ΡΠ½ΠΎΠ³ΠΎ ΡΠ»ΠΎΡ.
Π Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ ΡΡΠ½ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ - ΡΠ»ΡΠΆΠΈΡ ΠΎΡΠ½ΠΎΠ²ΠΎΠΉ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈ Π²ΡΠ·ΠΎΠ²Π° ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ².
#Maven #bompom
https://habr.com/ru/post/344480/
ΠΠ΅ΠΏΠ»ΠΎΡ Π°Ρ ΡΡΠ°ΡΡΡ ΠΏΡΠΎ Maven. ΠΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ΅Π½ Π²Π°ΡΠΈΠ°Π½Ρ "BOM POM" ΠΊΠΎΠ³Π΄Π° Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΈ Π½Π°Π΄ΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡ Π²Π΅ΡΡΠΈΡΠΌΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ.
https://habr.com/ru/post/344480/
ΠΠ΅ΠΏΠ»ΠΎΡ Π°Ρ ΡΡΠ°ΡΡΡ ΠΏΡΠΎ Maven. ΠΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ΅Π½ Π²Π°ΡΠΈΠ°Π½Ρ "BOM POM" ΠΊΠΎΠ³Π΄Π° Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΈ Π½Π°Π΄ΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡ Π²Π΅ΡΡΠΈΡΠΌΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ.
Π₯Π°Π±Ρ
ΠΠ΄Π΅Π°Π»ΡΠ½ΡΠΉ ΠΌΠ°Π²Π΅Π½. Π§Π°ΡΡΡ 2: ΡΡΡΡΠΊΡΡΡΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ°
ΠΡΠΎ Π²ΡΠΎΡΠ°Ρ ΡΡΠ°ΡΡΡ, ΠΏΠΎΡΠ²ΡΡΠ΅Π½Π½Π°Ρ ΠΌΠ°Π²Π΅Π½Ρ ΠΈ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠΎΠΈΡ
ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ². Π¦Π΅Π»ΡΡ ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠΈ Π±ΡΠ΄Π΅Ρ ΡΡΡΡΠΊΡΡΡΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΏΠΎΠ΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠ°Π²Π΅Π½. ΠΡΠΎΠ±ΡΡ
...
#Maven #DependencyScope #Scope #pom #dependencyManagement
#provided
ΠΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ Π΅ΡΠ΅ ΠΎ Maven.
Π§ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ "Dependency scope"?
Π ΠΊΠ°ΠΊΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ Π»ΡΡΡΠ΅?
<scope>?</scope>
ΠΠ±Π»Π°ΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ scope ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΡΠ°ΠΏ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΊΠ»Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΡΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ.
ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΈΡΠ°ΡΡ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅:
https://java-online.ru/maven-dependency.xhtml#scope
#provided
ΠΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ Π΅ΡΠ΅ ΠΎ Maven.
Π§ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ "Dependency scope"?
Π ΠΊΠ°ΠΊΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ Π»ΡΡΡΠ΅?
<scope>?</scope>
ΠΠ±Π»Π°ΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ scope ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΡΠ°ΠΏ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΊΠ»Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΡΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ.
ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΈΡΠ°ΡΡ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅:
https://java-online.ru/maven-dependency.xhtml#scope
#AtomicReference #ThreadSafe
ΠΡΠΈΠ²Π΅Ρ.
Π ΠΊΠ°ΠΊ Π²Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΠ΅ "Π°ΡΠΎΠΌΠ°ΡΠ½ΠΎΡΡΡ" Π² Java?
ΠΠΎΠΆΠ΅Ρ ΡΡΠΎ ΡΠΎΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ ΡΡΠΎ ΠΈ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ?
ΠΠ° ΠΌΠΎΠΉ Π²Π·Π³Π»ΡΠ΄ Π°ΡΠΎΠΌΠ°ΡΠ½ΠΎΡΡΡ ΠΏΡΠΎΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΏΠΎΠ½ΡΡΡ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ "Π½Π΅Π΄Π΅Π»ΠΈΠΌΠΎΡΡΠΈ" ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ.
Π’ΠΎ Π΅ΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π»ΠΈΠ±ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠ΅Π»ΠΈΠΊΠΎΠΌ (ΠΏΡΠΎΡΠΈΡΠ°ΡΡ, ΠΏΡΠΈΠ±Π°Π²ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π·Π°ΠΏΠΈΡΠ°ΡΡ - ΡΡΠΎ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½Ρ) Π»ΠΈΠ±ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΈ Π½Π°ΡΠΈΠ½Π°ΡΡ Π½Π΅ Π½Π°Π΄ΠΎ, ΡΡΠΎΠ±Ρ ΠΎΠ±ΡΠ΅ΠΊΡ Π½Π΅ ΡΠ°ΡΠΊΠΎΠ»Π±Π°ΡΠΈΠ»ΠΎ Π² Π΅Π³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ.
Π‘ΡΡΠ»ΠΊΠ° Π½Π° Π±Π΅ΡΠ΅Π΄Ρ ΠΏΠΎ ΡΠ΅ΠΌΠ΅:
https://ru.stackoverflow.com/questions/616278/%D0%90%D1%82%D0%BE%D0%BC%D0%B0%D1%80%D0%BD%D1%8B%D0%B5-%D0%B8-%D0%BD%D0%B5%D0%B0%D1%82%D0%BE%D0%BC%D0%B0%D1%80%D0%BD%D1%8B%D0%B5-%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8-java
ΠΡΠΈΠ²Π΅Ρ.
Π ΠΊΠ°ΠΊ Π²Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΠ΅ "Π°ΡΠΎΠΌΠ°ΡΠ½ΠΎΡΡΡ" Π² Java?
ΠΠΎΠΆΠ΅Ρ ΡΡΠΎ ΡΠΎΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ ΡΡΠΎ ΠΈ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ?
ΠΠ° ΠΌΠΎΠΉ Π²Π·Π³Π»ΡΠ΄ Π°ΡΠΎΠΌΠ°ΡΠ½ΠΎΡΡΡ ΠΏΡΠΎΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΏΠΎΠ½ΡΡΡ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ "Π½Π΅Π΄Π΅Π»ΠΈΠΌΠΎΡΡΠΈ" ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ.
Π’ΠΎ Π΅ΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π»ΠΈΠ±ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠ΅Π»ΠΈΠΊΠΎΠΌ (ΠΏΡΠΎΡΠΈΡΠ°ΡΡ, ΠΏΡΠΈΠ±Π°Π²ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π·Π°ΠΏΠΈΡΠ°ΡΡ - ΡΡΠΎ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½Ρ) Π»ΠΈΠ±ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΈ Π½Π°ΡΠΈΠ½Π°ΡΡ Π½Π΅ Π½Π°Π΄ΠΎ, ΡΡΠΎΠ±Ρ ΠΎΠ±ΡΠ΅ΠΊΡ Π½Π΅ ΡΠ°ΡΠΊΠΎΠ»Π±Π°ΡΠΈΠ»ΠΎ Π² Π΅Π³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ.
Π‘ΡΡΠ»ΠΊΠ° Π½Π° Π±Π΅ΡΠ΅Π΄Ρ ΠΏΠΎ ΡΠ΅ΠΌΠ΅:
https://ru.stackoverflow.com/questions/616278/%D0%90%D1%82%D0%BE%D0%BC%D0%B0%D1%80%D0%BD%D1%8B%D0%B5-%D0%B8-%D0%BD%D0%B5%D0%B0%D1%82%D0%BE%D0%BC%D0%B0%D1%80%D0%BD%D1%8B%D0%B5-%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8-java
#StreamAPI #Map #groupingBy #mapping
Java Stream API ΡΡΠ»ΠΈΡ.
Π’ΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²ΠΊΠΈ ΠΈ Π΅ΡΠ΅ ΡΠ°Π· ΠΏΠΎΠ΄ΡΠ΅ΡΠΊΠ½ΡΠ» Π΄Π»Ρ ΡΠ΅Π±Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎ ΡΡΡΠΈΠΌΠΎΠ².
ΠΡΠΈΠΌΠ΅Ρ - Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²ΠΊΠ° ΡΠΏΠΈΡΠΊΠ° ΡΠ°Π±ΠΎΡΠΈΡ ΠΏΠΎ ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½ΠΎΡΡΠΈ, ΠΏΡΠΈ ΡΡΠΎΠΌ Π½Π°Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠΌΠ΅Π½Π°:
https://habr.com/ru/post/348536/
Java Stream API ΡΡΠ»ΠΈΡ.
Π’ΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²ΠΊΠΈ ΠΈ Π΅ΡΠ΅ ΡΠ°Π· ΠΏΠΎΠ΄ΡΠ΅ΡΠΊΠ½ΡΠ» Π΄Π»Ρ ΡΠ΅Π±Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎ ΡΡΡΠΈΠΌΠΎΠ².
ΠΡΠΈΠΌΠ΅Ρ - Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²ΠΊΠ° ΡΠΏΠΈΡΠΊΠ° ΡΠ°Π±ΠΎΡΠΈΡ ΠΏΠΎ ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½ΠΎΡΡΠΈ, ΠΏΡΠΈ ΡΡΠΎΠΌ Π½Π°Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠΌΠ΅Π½Π°:
Map<String, Set<String>> map4 = workers.stream().collect(
Collectors.groupingBy(Worker::getPosition,
Collectors.mapping(Worker::getName,Collectors.toSet())));
https://habr.com/ru/post/348536/
Π₯Π°Π±Ρ
7 ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ groupingBy Π² Stream API
ΠΠΎΠ²ΠΈΡΠΊΠ°ΠΌ Π·Π°ΡΠ°ΡΡΡΡ ΡΡΡΠ΄Π½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ Π²ΡΠ³ΠΎΠ΄Ρ ΠΎΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Stream API Π·Π°ΠΌΠ΅ΡΡΠΎ ΠΎΠ±ΡΡΠ½ΡΡ
ΡΠΈΠΊΠ»ΠΎΠ², ΠΏΠΎΠ΄ ΠΊΠ°ΡΠΎΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠΌΠΎΠ³ΡΡ Π²Π°ΠΌ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠΆΠ°...
π2
#mockbean #spybean #springboottest #ioc
ΠΠ΅Π»Π°Π» Ρ ΡΡΡ ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³ ΡΠ΅ΡΡΠΎΠ² ΠΏΡΠΈ Π±Π΅Π³ΡΡΠ²Π΅ ΠΎΡ ΠΌΠΎΠ΄Π½ΠΎΠ³ΠΎ SpringBoot Π² Ρ ΡΠ΄ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ spring-context...
Π ΠΏΠΎΠ½ΡΠ» ΡΡΠΎ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π² SpringBoot Π΅ΡΡΡ ΡΠ°ΠΊΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠ΅ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ JUnit ΡΠ΅ΡΡΠΎΠ² ΠΊΠ°ΠΊ @SpyBean ΠΈ @MockBean, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎ Spring IoC ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π²Π½Π΅Π΄ΡΡΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΡΠ΅ΡΡΠΎΠ²ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ².
ΠΠ°Π΄ΠΈΠΌ ΠΊΡΠ°ΡΠΊΠΈΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ:
- @MockBean - ΠΌΠΎΠΊΠΈΡΡΠ΅Ρ (Mockito Mock) Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΡΠΏΡΠΈΠ½Π³Π°.
- @SpyBean - Π΄Π΅Π»Π°Π΅Ρ ΡΠΏΠΈΠΎΠ½Π° (Mockito Spy) ΠΈΠ· ΡΠΏΡΠΈΠ½Π³ Π±ΠΈΠ½Π°.
SpringBoot ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠΈΡΠ½ΡΠΉ, Π½ΠΎ Π΅ΡΡΡ ΠΈ ΠΏΡΠΈΡΡΠ½ΡΠ΅ ΠΌΠΎΠΌΠ΅Π½ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠ°ΠΊ ΡΡΠΈ Π΄Π²Π΅ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ΄ΡΡ Π² ΡΠΎΡΡΠ°Π²Π΅.
ΠΠ»Ρ ΠΏΠΎΡΠΈΡΠ°ΡΡ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ:
https://java-ru-blog.blogspot.com/2020/04/spring-boot-testing-mock-spy.html
ΠΠ΅Π»Π°Π» Ρ ΡΡΡ ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³ ΡΠ΅ΡΡΠΎΠ² ΠΏΡΠΈ Π±Π΅Π³ΡΡΠ²Π΅ ΠΎΡ ΠΌΠΎΠ΄Π½ΠΎΠ³ΠΎ SpringBoot Π² Ρ ΡΠ΄ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ spring-context...
Π ΠΏΠΎΠ½ΡΠ» ΡΡΠΎ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π² SpringBoot Π΅ΡΡΡ ΡΠ°ΠΊΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠ΅ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ JUnit ΡΠ΅ΡΡΠΎΠ² ΠΊΠ°ΠΊ @SpyBean ΠΈ @MockBean, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎ Spring IoC ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π²Π½Π΅Π΄ΡΡΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΡΠ΅ΡΡΠΎΠ²ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ².
ΠΠ°Π΄ΠΈΠΌ ΠΊΡΠ°ΡΠΊΠΈΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ:
- @MockBean - ΠΌΠΎΠΊΠΈΡΡΠ΅Ρ (Mockito Mock) Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΡΠΏΡΠΈΠ½Π³Π°.
- @SpyBean - Π΄Π΅Π»Π°Π΅Ρ ΡΠΏΠΈΠΎΠ½Π° (Mockito Spy) ΠΈΠ· ΡΠΏΡΠΈΠ½Π³ Π±ΠΈΠ½Π°.
SpringBoot ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠΈΡΠ½ΡΠΉ, Π½ΠΎ Π΅ΡΡΡ ΠΈ ΠΏΡΠΈΡΡΠ½ΡΠ΅ ΠΌΠΎΠΌΠ΅Π½ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠ°ΠΊ ΡΡΠΈ Π΄Π²Π΅ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ΄ΡΡ Π² ΡΠΎΡΡΠ°Π²Π΅.
ΠΠ»Ρ ΠΏΠΎΡΠΈΡΠ°ΡΡ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ:
https://java-ru-blog.blogspot.com/2020/04/spring-boot-testing-mock-spy.html
Blogspot
Spring Boot: ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, ΠΌΠΎΠΊΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ-ΡΠΏΠΈΠΎΠ½Ρ
π€1
#superBuilder #builder #lombok
ΠΠ°ΠΊ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ Lombok @Builder ΡΠΏΡΠΎΡΠ°Π΅Ρ ΠΆΠΈΠ·Π½Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ ΠΏΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΊΠΎΠ΄Π° ΠΈ Π΄Π΅Π»Π°Π΅Ρ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ Π»Π°ΠΊΠΎΠ½ΠΈΡΠ½ΡΠΌ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠΌ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΠΏΠΎΠ»Π΅ΠΉ Π² ΠΊΠ»Π°ΡΡΠ΅.
Π ΠΊΠ°ΠΊ Π½Π°ΡΡΠ΅Ρ Π±ΠΈΠ»Π΄Π΅ΡΠ° Π΄Π»Ρ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΈ Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠΎΠ²?
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π΅ΡΡΡ ΠΎΡΠ΅Π½Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ - Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ @SuperBuilder!
ΠΠ±ΡΠ°Ρ ΡΡ Π΅ΠΌΠ° ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ Π²ΠΊΡΠΏΠ΅ Ρ Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠ°ΠΌΠΈ:
@SuperBuilder
public abstract class Parent {
// Π½Π°ΡΠΈΠ½ΠΊΠ°...
}
@SuperBuilder
public class Son extends Parent {
// Π²ΠΊΡΡΠ½Π°Ρ Π½Π°ΡΠΈΠ½ΠΊΠ°...
}
@SuperBuilder
public class GrandSon extends Son {
// Π½Π°ΡΠΈΠ½ΠΊΠ° Π΅ΡΠ΅ Π²ΠΊΡΡΠ½Π΅ΠΉ...
}
ΠΠ°ΠΆΠ½ΠΎ - @SuperBuilder Π½Π΅Π»ΡΠ·Ρ ΡΠΌΠ΅ΡΠΈΠ²Π°ΡΡ Ρ @Builder Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠΈ ΠΊΠ»Π°ΡΡΠΎΠ². ΠΡΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ.
ΠΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅:
https://javascopes.com/lombok-builder-inheritance-bce31ecd/
ΠΠ°ΠΊ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ Lombok @Builder ΡΠΏΡΠΎΡΠ°Π΅Ρ ΠΆΠΈΠ·Π½Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ ΠΏΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΊΠΎΠ΄Π° ΠΈ Π΄Π΅Π»Π°Π΅Ρ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ Π»Π°ΠΊΠΎΠ½ΠΈΡΠ½ΡΠΌ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠΌ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΠΏΠΎΠ»Π΅ΠΉ Π² ΠΊΠ»Π°ΡΡΠ΅.
Π ΠΊΠ°ΠΊ Π½Π°ΡΡΠ΅Ρ Π±ΠΈΠ»Π΄Π΅ΡΠ° Π΄Π»Ρ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΈ Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠΎΠ²?
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π΅ΡΡΡ ΠΎΡΠ΅Π½Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ - Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ @SuperBuilder!
ΠΠ±ΡΠ°Ρ ΡΡ Π΅ΠΌΠ° ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ Π²ΠΊΡΠΏΠ΅ Ρ Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠ°ΠΌΠΈ:
@SuperBuilder
public abstract class Parent {
// Π½Π°ΡΠΈΠ½ΠΊΠ°...
}
@SuperBuilder
public class Son extends Parent {
// Π²ΠΊΡΡΠ½Π°Ρ Π½Π°ΡΠΈΠ½ΠΊΠ°...
}
@SuperBuilder
public class GrandSon extends Son {
// Π½Π°ΡΠΈΠ½ΠΊΠ° Π΅ΡΠ΅ Π²ΠΊΡΡΠ½Π΅ΠΉ...
}
ΠΠ°ΠΆΠ½ΠΎ - @SuperBuilder Π½Π΅Π»ΡΠ·Ρ ΡΠΌΠ΅ΡΠΈΠ²Π°ΡΡ Ρ @Builder Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠΈ ΠΊΠ»Π°ΡΡΠΎΠ². ΠΡΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ.
ΠΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅:
https://javascopes.com/lombok-builder-inheritance-bce31ecd/
π1
#builder #lombok
ΠΠ°ΠΊ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ builder ΠΏΠ°ΡΡΠ΅ΡΠ½ Π΅ΡΠ»ΠΈ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ Π²Π΅ΡΠ°Π΅ΡΡΡ Π½Π° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΈ Π½Π° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠ°?
ΠΠ° ΡΠΊΡΠΈΠ½ΡΠΎΡΠ΅ ΡΠ²Π½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° - ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΡΠ³Π°Π΅ΡΡΡ Π½Π° ΠΌΠ΅ΡΠΎΠ΄ builder ΠΏΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠΌΡ ΡΠΈΠΏΡ.
Π Π΅ΡΠ΅Π½ΠΈΠ΅ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π² Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ Π½Π°Π΄ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ²ΠΎΠ΅ ΠΈΠΌΡ Π±ΠΈΠ»Π΄Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄Π° Π΄Π»Ρ Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠ°:
@Builder(builderMethodName = "sunnyBuilder")
ΠΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΈΠΌΠ΅Ρ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅ Π² ΠΏΡΠ½ΠΊΡΠ΅ "2.3. Π‘ΠΎΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Builders".
https://javascopes.com/lombok-builder-inheritance-bce31ecd/
ΠΠ°ΠΊ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ builder ΠΏΠ°ΡΡΠ΅ΡΠ½ Π΅ΡΠ»ΠΈ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ Π²Π΅ΡΠ°Π΅ΡΡΡ Π½Π° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΈ Π½Π° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠ°?
ΠΠ° ΡΠΊΡΠΈΠ½ΡΠΎΡΠ΅ ΡΠ²Π½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° - ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΡΠ³Π°Π΅ΡΡΡ Π½Π° ΠΌΠ΅ΡΠΎΠ΄ builder ΠΏΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠΌΡ ΡΠΈΠΏΡ.
Π Π΅ΡΠ΅Π½ΠΈΠ΅ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π² Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ Π½Π°Π΄ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ²ΠΎΠ΅ ΠΈΠΌΡ Π±ΠΈΠ»Π΄Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄Π° Π΄Π»Ρ Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠ°:
@Builder(builderMethodName = "sunnyBuilder")
ΠΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΈΠΌΠ΅Ρ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅ Π² ΠΏΡΠ½ΠΊΡΠ΅ "2.3. Π‘ΠΎΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Builders".
https://javascopes.com/lombok-builder-inheritance-bce31ecd/
π1
#mutable #immutable #cuncurrency
https://youtu.be/f8nEQ5zDsOQ
ΠΠ° ΠΌΠΎΠΉ Π²Π·Π³Π»ΡΠ΄ Π½Π°ΡΡΠΎΡΡΠ΅Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΌΡΡΠ°Π±Π΅Π»ΡΠ½ΠΎΡΡΠΈ, Π° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠΊΠΈ - ΡΡΠΎ ΡΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½Π°Ρ ΡΠ΅ΠΌΠ°.
Π ΡΡΠΎΠΌ Π²ΠΈΠ΄Π΅ΠΎ Π°Π²ΡΠΎΡ ΠΊΡΠ°ΡΠΊΠΎ ΡΠ°ΡΠΊΡΡΠ²Π°Π΅Ρ Π²ΠΎΠΏΡΠΎΡ ΠΏΠΎΡΠ΅ΠΌΡ ΠΈΠΌΠΌΡΡΠ°Π±Π΅Π»ΡΠ½ΠΎΡΡΡ - ΡΡΠΎ Π²ΡΠ³ΠΎΠ΄Π½ΠΎ!
https://youtu.be/f8nEQ5zDsOQ
ΠΠ° ΠΌΠΎΠΉ Π²Π·Π³Π»ΡΠ΄ Π½Π°ΡΡΠΎΡΡΠ΅Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΌΡΡΠ°Π±Π΅Π»ΡΠ½ΠΎΡΡΠΈ, Π° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠΊΠΈ - ΡΡΠΎ ΡΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½Π°Ρ ΡΠ΅ΠΌΠ°.
Π ΡΡΠΎΠΌ Π²ΠΈΠ΄Π΅ΠΎ Π°Π²ΡΠΎΡ ΠΊΡΠ°ΡΠΊΠΎ ΡΠ°ΡΠΊΡΡΠ²Π°Π΅Ρ Π²ΠΎΠΏΡΠΎΡ ΠΏΠΎΡΠ΅ΠΌΡ ΠΈΠΌΠΌΡΡΠ°Π±Π΅Π»ΡΠ½ΠΎΡΡΡ - ΡΡΠΎ Π²ΡΠ³ΠΎΠ΄Π½ΠΎ!
YouTube
25 3 ΠΠΌΠΌΡΡΠ°Π±Π΅Π»ΡΠ½ΡΠ΅ ΠΈ ΠΡΡΠ°Π±Π΅Π»ΡΠ½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π² Java
ΠΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π· ΠΏΡΠΎΡΠΈΠ»ΠΈ Π²ΡΠ»ΠΎΠΆΠΈΡΡ ΠΊΡΡΡ ΠΏΠΎ ΠΎΡΠ½ΠΎΠ²Π°ΠΌ Java. Π― ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ ΡΡΠΎ ΡΠ°ΠΊΠΈΡ
ΠΊΡΡΡΠΎΠ² ΡΠΆΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ, Π½ΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π³ΠΎΠ²ΠΎΡΡΡ ΡΡΠΎ ΠΈΠΌ ΠΏΠΎΠ½ΡΡΠ½Π΅ΠΉ ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡΡΡΠ½ΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ.
ΠΠ°Π½Π½ΡΠΉ ΠΊΡΡΡ ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° ΠΊΠ½ΠΈΠ³Π΅ OCA: Oracle Certified Associate Java SE 8 Programmer I Study Guide: Examβ¦
ΠΠ°Π½Π½ΡΠΉ ΠΊΡΡΡ ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° ΠΊΠ½ΠΈΠ³Π΅ OCA: Oracle Certified Associate Java SE 8 Programmer I Study Guide: Examβ¦
π€1
#threadlocal
Π‘ΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ - Π·Π°Π²Π΅Π» ThreadLocal ΠΏΠΎΠ»Π΅, Π²ΡΠΏΠΎΠ»Π½ΠΈΠ» .set(), Π° ΡΡΠΎ ΠΏΠΎΠ»Π΅ Ρ ΠΎΡΡ ΡΡ ΡΡΠ΅ΡΠ½ΠΈ, ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ° ΡΠ΅ΡΠ²ΠΈΡΠ° Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ - null ΠΈ Π²ΡΠ΅!
ΠΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ, ΡΡΠΎΠ±Ρ ThreadLocal ΠΏΠΎΠ»Π΅ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²Π½ΡΡΡΠΈ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠΉ Π·ΠΎΠ½Ρ ΠΊΠΎΠ΄Π° - Π½ΡΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°ΡΡ ΡΠ΅ΡΠ΅Π· .set() Π²Π½ΡΡΡΠΈ ΡΡΠΎΠΉ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠΉ Π·ΠΎΠ½Ρ ΠΊΠΎΠ΄Π° (Π² ΡΠ°ΠΌΠΊΠ°Ρ ThreadPool, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΏΠΎΠ»Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠΌΠ΅ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅).
Π ΠΎΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π΄ΠΎ ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΡ Π² ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ Π·ΠΎΠ½Ρ Π΄Π΅Π»Π°Π» .set() - ThreadLocal ΠΏΠΎΠ»Ρ Π½Π° ΡΡΠΎ "ΡΠΈΠΎΠ»Π΅ΡΠΎΠ²ΠΎ", ΠΎΠ½ΠΎ ΠΊΠ°ΠΊ Π±ΡΠ»ΠΎ "null" (ΠΏΠΎ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΊΠ»Π°ΡΡΠ°), ΡΠ°ΠΊ "null" ΠΈ Π·Π°ΡΠ»ΠΎ Π² Π·ΠΎΠ½Ρ ΡΠ°Π±ΠΎΡΡ ThreadPool.
Π₯ΠΎΡΡ 100 ΡΠ°Π· Π΄Π΅Π»Π°ΠΉ .set() Π΄ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΠΆΠΈΠΌΠ° - ThreadLocal ΠΏΠΎΠ»Π΅ ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ Π² ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠΉ Π·ΠΎΠ½Π΅ Π² ΡΠ°ΠΊΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ, Π² ΠΊΠΎΡΠΎΡΡΠΌ ΠΎΠ½ΠΎ Π±ΡΠ»ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΎ.
ΠΠΎΡΠ°Π»Ρ Π±Π°ΡΠ½ΠΈ ΡΠ°ΠΊΠΎΠ²Π° - Π·Π°Π΄Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ThreadLocal Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Π² ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ 2 Π²Π°ΡΠΈΠ°Π½ΡΠ°ΠΌΠΈ:
1) ΠΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΊΠ»Π°ΡΡΠ°.
2) Π‘ ΠΏΠΎΠΌΠΎΡΡΡ .set() Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π²Π½ΡΡΡΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠΉ Π·ΠΎΠ½Ρ.
ΠΠ»Π°ΡΡΠ½ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ "thread-safety":
https://javascopes.com/java-thread-safety-11db95ab/
Π‘ΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ - Π·Π°Π²Π΅Π» ThreadLocal ΠΏΠΎΠ»Π΅, Π²ΡΠΏΠΎΠ»Π½ΠΈΠ» .set(), Π° ΡΡΠΎ ΠΏΠΎΠ»Π΅ Ρ ΠΎΡΡ ΡΡ ΡΡΠ΅ΡΠ½ΠΈ, ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ° ΡΠ΅ΡΠ²ΠΈΡΠ° Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ - null ΠΈ Π²ΡΠ΅!
ΠΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ, ΡΡΠΎΠ±Ρ ThreadLocal ΠΏΠΎΠ»Π΅ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²Π½ΡΡΡΠΈ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠΉ Π·ΠΎΠ½Ρ ΠΊΠΎΠ΄Π° - Π½ΡΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°ΡΡ ΡΠ΅ΡΠ΅Π· .set() Π²Π½ΡΡΡΠΈ ΡΡΠΎΠΉ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠΉ Π·ΠΎΠ½Ρ ΠΊΠΎΠ΄Π° (Π² ΡΠ°ΠΌΠΊΠ°Ρ ThreadPool, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΏΠΎΠ»Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠΌΠ΅ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅).
Π ΠΎΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π΄ΠΎ ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΡ Π² ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ Π·ΠΎΠ½Ρ Π΄Π΅Π»Π°Π» .set() - ThreadLocal ΠΏΠΎΠ»Ρ Π½Π° ΡΡΠΎ "ΡΠΈΠΎΠ»Π΅ΡΠΎΠ²ΠΎ", ΠΎΠ½ΠΎ ΠΊΠ°ΠΊ Π±ΡΠ»ΠΎ "null" (ΠΏΠΎ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΊΠ»Π°ΡΡΠ°), ΡΠ°ΠΊ "null" ΠΈ Π·Π°ΡΠ»ΠΎ Π² Π·ΠΎΠ½Ρ ΡΠ°Π±ΠΎΡΡ ThreadPool.
Π₯ΠΎΡΡ 100 ΡΠ°Π· Π΄Π΅Π»Π°ΠΉ .set() Π΄ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΠΆΠΈΠΌΠ° - ThreadLocal ΠΏΠΎΠ»Π΅ ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ Π² ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠΉ Π·ΠΎΠ½Π΅ Π² ΡΠ°ΠΊΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ, Π² ΠΊΠΎΡΠΎΡΡΠΌ ΠΎΠ½ΠΎ Π±ΡΠ»ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΎ.
ΠΠΎΡΠ°Π»Ρ Π±Π°ΡΠ½ΠΈ ΡΠ°ΠΊΠΎΠ²Π° - Π·Π°Π΄Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ThreadLocal Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Π² ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ 2 Π²Π°ΡΠΈΠ°Π½ΡΠ°ΠΌΠΈ:
1) ΠΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΊΠ»Π°ΡΡΠ°.
2) Π‘ ΠΏΠΎΠΌΠΎΡΡΡ .set() Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π²Π½ΡΡΡΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠΉ Π·ΠΎΠ½Ρ.
ΠΠ»Π°ΡΡΠ½ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ "thread-safety":
https://javascopes.com/java-thread-safety-11db95ab/
π₯4π1
#atomicreference
ΠΠΎΡΠ΅ΠΌΡ ΠΊΠΎΠ³Π΄Π° ΠΏΠΈΡΠ΅ΡΡ Stream ΡΠΎ IDEA ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΠΊΠΎΠ½Π²Π΅ΡΡΠ°ΡΠΈΡ Π² AtomicReference?
ΠΠΎΠΎΠ±ΡΠ΅ Π΄Π»Ρ ΡΠ΅Π³ΠΎ Π½ΡΠΆΠ΅Π½ ΡΡΠΎΡ ΡΠΈΠΏ ΠΏΠΎΠ»Π΅ΠΉ?
ΠΡΠΎΠΌΠΈΠΊΠΈ - ΡΡΠΎ ΠΊΠ»Π°ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ²ΠΎΠ΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π°ΡΠΎΠΌΠ°ΡΠ½ΠΎ, Ρ.ΠΎ. ΠΎΠ½ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ lock-free thread-safe ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ . ΠΠΎΡΡΠΈΠ³Π°Π΅ΡΡΡ ΡΡΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° compare-and-swap (CAS) ΠΈ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π±ΡΡΡΡΠ΅Π΅, ΡΠ΅ΠΌ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ°ΠΌΠΈ. ΠΠ° ΡΡΠΎΠ²Π½Π΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ² ΠΈΠΌΠ΅Π΅ΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° CAS.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π° ΡΠΊΡΠΈΠ½ΡΠΎΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ addMissedColToDf ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠΊΠ΅ ΠΈ ΠΏΠΎΡΠΎΠΊΠΈ ΡΠΈΠ»ΡΠ½ΠΎ Π·Π°Ρ ΠΎΡΡΡ Π·Π°ΠΉΡΠΈ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ resultDf ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΊΠΎΠ»ΠΎΠ½ΠΊΡ ΠΊ Π½Π°Π±ΠΎΡΡ Π΄Π°Π½Π½ΡΡ , Π½ΠΎ ΠΎΠ½Π° (resultDf) Π΄Π°ΡΡ ΠΏΠΎΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π½Π΅ΠΉ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π²ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ ΡΠ°Π·Π±ΠΈΡΠΎΠ³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΊΠ°ΠΆΠ΄ΡΠΌ ΠΈΠ· ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ!
Π’ΠΎ Π΅ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π»ΠΈΠ±ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π»ΠΈΠ±ΠΎ ΡΡΠΎ ΠΏΠΎΠ»Π΅ ΠΏΠΎΡΡΠ»Π°Π΅Ρ java Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π»Π΅ΡΠΎΠΌ ΠΈ Π½Π΅ Π΄Π°Π΅Ρ Π½ΠΈΡΠ΅Π³ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ.
ΠΠ»Π°ΡΡΠ½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π°ΡΠΎΠΌΠΈΠΊΠΎΠ²:
https://github.com/jmorozov/awesome-java-backend-interview-rus/blob/main/java/concurrency.md#ΠΊΠ°ΠΊ-ΡΠ°Π±ΠΎΡΠ°ΡΡ-Π°ΡΠΎΠΌΠΈΠΊΠΈ
ΠΠΎΡΠ΅ΠΌΡ ΠΊΠΎΠ³Π΄Π° ΠΏΠΈΡΠ΅ΡΡ Stream ΡΠΎ IDEA ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΠΊΠΎΠ½Π²Π΅ΡΡΠ°ΡΠΈΡ Π² AtomicReference?
ΠΠΎΠΎΠ±ΡΠ΅ Π΄Π»Ρ ΡΠ΅Π³ΠΎ Π½ΡΠΆΠ΅Π½ ΡΡΠΎΡ ΡΠΈΠΏ ΠΏΠΎΠ»Π΅ΠΉ?
ΠΡΠΎΠΌΠΈΠΊΠΈ - ΡΡΠΎ ΠΊΠ»Π°ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ²ΠΎΠ΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π°ΡΠΎΠΌΠ°ΡΠ½ΠΎ, Ρ.ΠΎ. ΠΎΠ½ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ lock-free thread-safe ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ . ΠΠΎΡΡΠΈΠ³Π°Π΅ΡΡΡ ΡΡΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° compare-and-swap (CAS) ΠΈ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π±ΡΡΡΡΠ΅Π΅, ΡΠ΅ΠΌ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ°ΠΌΠΈ. ΠΠ° ΡΡΠΎΠ²Π½Π΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ² ΠΈΠΌΠ΅Π΅ΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° CAS.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π° ΡΠΊΡΠΈΠ½ΡΠΎΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ addMissedColToDf ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠΊΠ΅ ΠΈ ΠΏΠΎΡΠΎΠΊΠΈ ΡΠΈΠ»ΡΠ½ΠΎ Π·Π°Ρ ΠΎΡΡΡ Π·Π°ΠΉΡΠΈ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ resultDf ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΊΠΎΠ»ΠΎΠ½ΠΊΡ ΠΊ Π½Π°Π±ΠΎΡΡ Π΄Π°Π½Π½ΡΡ , Π½ΠΎ ΠΎΠ½Π° (resultDf) Π΄Π°ΡΡ ΠΏΠΎΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π½Π΅ΠΉ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π²ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ ΡΠ°Π·Π±ΠΈΡΠΎΠ³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΊΠ°ΠΆΠ΄ΡΠΌ ΠΈΠ· ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ!
Π’ΠΎ Π΅ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π»ΠΈΠ±ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π»ΠΈΠ±ΠΎ ΡΡΠΎ ΠΏΠΎΠ»Π΅ ΠΏΠΎΡΡΠ»Π°Π΅Ρ java Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π»Π΅ΡΠΎΠΌ ΠΈ Π½Π΅ Π΄Π°Π΅Ρ Π½ΠΈΡΠ΅Π³ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ.
ΠΠ»Π°ΡΡΠ½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π°ΡΠΎΠΌΠΈΠΊΠΎΠ²:
https://github.com/jmorozov/awesome-java-backend-interview-rus/blob/main/java/concurrency.md#ΠΊΠ°ΠΊ-ΡΠ°Π±ΠΎΡΠ°ΡΡ-Π°ΡΠΎΠΌΠΈΠΊΠΈ
π2
#idea #replace #refact
Π‘Π΅Π³ΠΎΠ΄Π½Ρ Π΄Π΅Π»Π°Π» ΠΌΠ½ΠΎΠ³ΠΎ Π·Π°ΠΌΠ΅Π½ Π² ΠΊΠΎΠ΄Π΅ Π²Π²ΠΈΠ΄Ρ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΌΠΎΠ΄ΡΠ»Ρ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΏΠΎ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Ρ.
Π‘ΡΠΈΠΌΡΠ»ΠΈΡΡΡΡΠ°Ρ ΠΊ ΡΠ°Π±ΠΎΡΠ΅ ΠΊΠ°ΡΡΠΈΠ½Π°, ΠΊΠΎΠ³Π΄Π° ΡΡΡΠ»ΠΊΠΈ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΊΡΠ°ΡΠ½Π΅ΡΡ, ΠΏΡΠΎΠ΅ΠΊΡ Π½Π΅ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΡΡ...
Π ΡΡΡ Π½Π° ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ IDEA!
ΠΠΎΡΡΡΠ΅Π΅ ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠ΅ ΠΊΠ»Π°Π²ΠΈΡ "Ctrl+Shift+R" ΠΈ ΠΌΠ΅Π½Ρ Π·Π°ΠΌΠ΅Π½Ρ ΡΠΏΠ°ΡΠ°Π΅Ρ ΡΡΠΎ ΠΏΠΎΠΊΡΠ°ΡΠ½Π΅Π½ΠΈΠ΅.
ΠΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΌΠ½Π΅ ΠΏΠΎΠ½ΡΠ°Π²ΠΈΠ»Π°ΡΡ ΠΎΠΏΡΠΈΡ Π·Π°ΠΌΠ΅Π½Ρ Π½Π° Π±Π°Π·Π΅ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π·ΠΎΠ½Ρ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π² "Scope" Π½Π°Π΄ΠΎ Π²ΡΠ±ΡΠ°ΡΡ "Selection".
ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎ Π·Π°ΠΌΠ΅Π½Π΅ Π΅ΡΡΡ Π² ΡΡΠ°ΡΡΠ΅ Π½Π° ΡΠ°ΠΉΡΠ΅ JetBrains: https://www.jetbrains.com/help/idea/finding-and-replacing-text-in-project.html#replace_search_string_in_project
Π‘Π΅Π³ΠΎΠ΄Π½Ρ Π΄Π΅Π»Π°Π» ΠΌΠ½ΠΎΠ³ΠΎ Π·Π°ΠΌΠ΅Π½ Π² ΠΊΠΎΠ΄Π΅ Π²Π²ΠΈΠ΄Ρ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΌΠΎΠ΄ΡΠ»Ρ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΏΠΎ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Ρ.
Π‘ΡΠΈΠΌΡΠ»ΠΈΡΡΡΡΠ°Ρ ΠΊ ΡΠ°Π±ΠΎΡΠ΅ ΠΊΠ°ΡΡΠΈΠ½Π°, ΠΊΠΎΠ³Π΄Π° ΡΡΡΠ»ΠΊΠΈ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΊΡΠ°ΡΠ½Π΅ΡΡ, ΠΏΡΠΎΠ΅ΠΊΡ Π½Π΅ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΡΡ...
Π ΡΡΡ Π½Π° ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ IDEA!
ΠΠΎΡΡΡΠ΅Π΅ ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠ΅ ΠΊΠ»Π°Π²ΠΈΡ "Ctrl+Shift+R" ΠΈ ΠΌΠ΅Π½Ρ Π·Π°ΠΌΠ΅Π½Ρ ΡΠΏΠ°ΡΠ°Π΅Ρ ΡΡΠΎ ΠΏΠΎΠΊΡΠ°ΡΠ½Π΅Π½ΠΈΠ΅.
ΠΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΌΠ½Π΅ ΠΏΠΎΠ½ΡΠ°Π²ΠΈΠ»Π°ΡΡ ΠΎΠΏΡΠΈΡ Π·Π°ΠΌΠ΅Π½Ρ Π½Π° Π±Π°Π·Π΅ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π·ΠΎΠ½Ρ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π² "Scope" Π½Π°Π΄ΠΎ Π²ΡΠ±ΡΠ°ΡΡ "Selection".
ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎ Π·Π°ΠΌΠ΅Π½Π΅ Π΅ΡΡΡ Π² ΡΡΠ°ΡΡΠ΅ Π½Π° ΡΠ°ΠΉΡΠ΅ JetBrains: https://www.jetbrains.com/help/idea/finding-and-replacing-text-in-project.html#replace_search_string_in_project
IntelliJΒ IDEA Help
Search and replace a target within a project | IntelliJ IDEA
Learn how to search for text strings in IntelliJ IDEA: filter results, find usages, replace, and configure
automatic highlighting.
automatic highlighting.
π3
#forkjoinpool
ΠΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅, Π³Π΄Π΅ Ρ ΡΠ°Π±ΠΎΡΠ°Ρ, ΡΡΠΎΡ Π²ΠΈΠ΄ threadpool ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΠΎΡΡΠΈΠΉ Π΄Π°Π½Π½ΡΡ .
ΠΠ°Π΄ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΠΎ ΡΠ²ΠΎΠ΅ΠΉ Π·Π°Π΄Π°ΡΠ΅ΠΉ Ρ ΠΎΡΠΎΡΠΎ. ΠΡΠ»ΠΈ ΡΠ΄Π΅Π»Π°Π½Ρ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΌ fixedThreadPool. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ΅ΡΡΠΎΠ² ΠΏΠΎΠ΄ Π½Π°ΡΡΠΎΡΡΠ΅ΠΉ Π½Π°Π³ΡΡΠ·ΠΊΠΎΠΉ forkjoin ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΏΠ΅ΡΠ²ΡΠΌ ΠΏΡΠΎΡΠ²Π°Π» Π»ΠΈΠ½ΠΈΡ ΡΡΠΎΠ½ΡΠ° ΠΈ ΠΎΡΡΠ°Π±ΠΎΡΠ°Π» Π±Π΅Π· ΠΎΡΠΈΠ±ΠΎΠΊ.
Π ΡΠ΅ΠΌ ΡΠΈΠ»Π°??
Π Π½Π΅ΠΌ Π²ΠΎΡΠΎΠ²ΡΠΊΠ°Ρ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ ΠΎΡΠ±ΠΈΡΠ°Π½ΠΈΡ Π·Π°Π΄Π°Ρ Ρ ΡΠΎΡΠ΅Π΄Π°!
ΠΡΠΎΡΡΡΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΡΠ΄ΡΠ°-ΠΏΠΎΡΠΎΠΊΠΈ ΠΏΠΎΠΌΠΎΠ³Π°ΡΡ Π΄ΡΡΠ³ Π΄ΡΡΠ³Ρ Π² Π±Π΅Π΄Π΅, Π΅ΡΠ»ΠΈ ΠΊΠΎΠ³ΠΎ-ΡΠΎ ΠΈΠ· Π½ΠΈΡ Π·Π°Π²Π°Π»ΠΈΠ²Π°ΡΡ.
ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π² Π»ΠΈΡΠ΅ΡΠ°ΡΡΡΠ΅ ΡΡΠ° ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ ΡΠ°ΠΊ ΠΈ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ "work stealing".
ΠΠ»Π°ΡΡΠ½Π°Ρ ΡΡΠ°ΡΡΡ Π½Π° ΡΠ΅ΠΌΡ:
https://www.google.com/amp/s/nuancesprog.ru/p/11996/%3famp
ΠΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅, Π³Π΄Π΅ Ρ ΡΠ°Π±ΠΎΡΠ°Ρ, ΡΡΠΎΡ Π²ΠΈΠ΄ threadpool ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΠΎΡΡΠΈΠΉ Π΄Π°Π½Π½ΡΡ .
ΠΠ°Π΄ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΠΎ ΡΠ²ΠΎΠ΅ΠΉ Π·Π°Π΄Π°ΡΠ΅ΠΉ Ρ ΠΎΡΠΎΡΠΎ. ΠΡΠ»ΠΈ ΡΠ΄Π΅Π»Π°Π½Ρ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΌ fixedThreadPool. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ΅ΡΡΠΎΠ² ΠΏΠΎΠ΄ Π½Π°ΡΡΠΎΡΡΠ΅ΠΉ Π½Π°Π³ΡΡΠ·ΠΊΠΎΠΉ forkjoin ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΏΠ΅ΡΠ²ΡΠΌ ΠΏΡΠΎΡΠ²Π°Π» Π»ΠΈΠ½ΠΈΡ ΡΡΠΎΠ½ΡΠ° ΠΈ ΠΎΡΡΠ°Π±ΠΎΡΠ°Π» Π±Π΅Π· ΠΎΡΠΈΠ±ΠΎΠΊ.
Π ΡΠ΅ΠΌ ΡΠΈΠ»Π°??
Π Π½Π΅ΠΌ Π²ΠΎΡΠΎΠ²ΡΠΊΠ°Ρ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ ΠΎΡΠ±ΠΈΡΠ°Π½ΠΈΡ Π·Π°Π΄Π°Ρ Ρ ΡΠΎΡΠ΅Π΄Π°!
ΠΡΠΎΡΡΡΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΡΠ΄ΡΠ°-ΠΏΠΎΡΠΎΠΊΠΈ ΠΏΠΎΠΌΠΎΠ³Π°ΡΡ Π΄ΡΡΠ³ Π΄ΡΡΠ³Ρ Π² Π±Π΅Π΄Π΅, Π΅ΡΠ»ΠΈ ΠΊΠΎΠ³ΠΎ-ΡΠΎ ΠΈΠ· Π½ΠΈΡ Π·Π°Π²Π°Π»ΠΈΠ²Π°ΡΡ.
ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π² Π»ΠΈΡΠ΅ΡΠ°ΡΡΡΠ΅ ΡΡΠ° ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ ΡΠ°ΠΊ ΠΈ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ "work stealing".
ΠΠ»Π°ΡΡΠ½Π°Ρ ΡΡΠ°ΡΡΡ Π½Π° ΡΠ΅ΠΌΡ:
https://www.google.com/amp/s/nuancesprog.ru/p/11996/%3famp
π€2
#functionalinterface
ΠΠΎΠΏΡΡΡΠΈΠΌ Π½Π°Π΄ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄Π»ΠΈΠ½Ρ ΡΡΡΠΎΠΊΠΈ.
ΠΠΈΡΠ΅ΠΌ Π² ΠΊΠΎΠΌΠ΅Π½ΡΠ°Ρ - ΠΊΠ°ΠΊΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ Π²Π°ΠΌ Π½ΡΠ°Π²ΠΈΡΡΡΡ ΠΈ ΠΏΠΎΡΠ΅ΠΌΡ?
1. s -> s.length()
2. String::length
ΠΠ½Π΅ Π½ΡΠ°Π²ΠΈΡΡΡ, ΠΊΠΎΠ³Π΄Π° Π² ΠΊΠΎΠ΄Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ method reference Ρ Π΄Π²ΠΎΠΉΠ½ΡΠΌ Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΠ΅ΠΌ :: Π»Π°ΠΊΠΎΠ½ΠΈΡΠ½ΠΎ ΠΈ ΠΊΡΠ°ΡΠΈΠ²ΠΎ. Π ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ ΠΏΠΎ method reference ΠΊΡΡΠ°ΡΠΈ ΠΏΠΈΡΠ΅Ρ ΠΈ ΠΠΆΠΎΡΡΠ° ΠΠ»ΠΎΡ Π² ΠΊΠ½ΠΈΠ³Π΅ "Effective Java".
ΠΡΡΡ ΡΠ°ΠΊΠΎΠΉ Π²ΠΈΠ΄ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² - "ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ" β ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ 1 Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄, ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π΄Π΅Π»Π°ΡΡ method reference :: ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π»ΡΠΌΠ±Π΄Π° Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ ->.
ΠΠ° ΡΠ°ΠΊΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΎΠ±ΡΡΠ½ΠΎ Π²Π΅ΡΠ°Π΅ΡΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ @FunctionalInterface - ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π½Π°Π»ΠΈΡΠΈΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°.
ΠΠΠΠΠ - default ΠΈ static ΠΌΠ΅ΡΠΎΠ΄Ρ Π½Π΅ Π² ΡΡΡΡ.
https://javarush.ru/groups/posts/592-java-functional-interfaces
ΠΠΎΠΏΡΡΡΠΈΠΌ Π½Π°Π΄ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄Π»ΠΈΠ½Ρ ΡΡΡΠΎΠΊΠΈ.
ΠΠΈΡΠ΅ΠΌ Π² ΠΊΠΎΠΌΠ΅Π½ΡΠ°Ρ - ΠΊΠ°ΠΊΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ Π²Π°ΠΌ Π½ΡΠ°Π²ΠΈΡΡΡΡ ΠΈ ΠΏΠΎΡΠ΅ΠΌΡ?
1. s -> s.length()
2. String::length
ΠΠ½Π΅ Π½ΡΠ°Π²ΠΈΡΡΡ, ΠΊΠΎΠ³Π΄Π° Π² ΠΊΠΎΠ΄Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ method reference Ρ Π΄Π²ΠΎΠΉΠ½ΡΠΌ Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΠ΅ΠΌ :: Π»Π°ΠΊΠΎΠ½ΠΈΡΠ½ΠΎ ΠΈ ΠΊΡΠ°ΡΠΈΠ²ΠΎ. Π ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ ΠΏΠΎ method reference ΠΊΡΡΠ°ΡΠΈ ΠΏΠΈΡΠ΅Ρ ΠΈ ΠΠΆΠΎΡΡΠ° ΠΠ»ΠΎΡ Π² ΠΊΠ½ΠΈΠ³Π΅ "Effective Java".
ΠΡΡΡ ΡΠ°ΠΊΠΎΠΉ Π²ΠΈΠ΄ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² - "ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ" β ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ 1 Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄, ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π΄Π΅Π»Π°ΡΡ method reference :: ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π»ΡΠΌΠ±Π΄Π° Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ ->.
ΠΠ° ΡΠ°ΠΊΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΎΠ±ΡΡΠ½ΠΎ Π²Π΅ΡΠ°Π΅ΡΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ @FunctionalInterface - ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π½Π°Π»ΠΈΡΠΈΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°.
ΠΠΠΠΠ - default ΠΈ static ΠΌΠ΅ΡΠΎΠ΄Ρ Π½Π΅ Π² ΡΡΡΡ.
https://javarush.ru/groups/posts/592-java-functional-interfaces
π2
#spring #enabletransactionmanagement #transaction
Π‘ Π²Π΅ΡΡΠΈΠΈ 3.1 Spring Π²Π²Π΅Π» Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ @EnableTransactionManagement, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Ρ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠ΅ΠΉ @Configuration Π½Π°Π΄ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΌΠΈ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ ΠΈ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ Π±Π΅ΡΡΠΎΠ²Π½ΠΎΠΉ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ ΡΠ΅ΡΠ΅Π· Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ @Transactional.
Π ΡΠ΅ Π·Π° Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ @Transactional ΠΈ ΠΏΠΎΡΠ΅ΠΌΡ Π±Π΅ΡΡΠΎΠ²Π½ΡΠ΅??
ΠΠ΅ΡΠΎΠ΄ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½ ΠΊΠ°ΠΊ @Transactional - ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΠΎΡΠΊΠ°Ρ Π²ΡΠ΅Ρ Π·Π°ΠΏΠΈΡΠ΅ΠΉ, Π΅ΡΠ»ΠΈ Π»ΡΠ±Π°Ρ ΠΈΠ· ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π²ΡΡΠ°Π²ΠΊΠΈ Π² ΡΡΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π΅ Π·Π°Π²Π΅ΡΡΠΈΡΡΡ Π½Π΅ΡΠ΄Π°ΡΠ΅ΠΉ, Π° ΡΠ°ΠΊΠΆΠ΅ Spring Π±ΡΠΎΡΠΈΡ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅.
ΠΠΠΠΠ: Π΅ΡΠ»ΠΈ Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ Ρ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠ΅ΠΉ @Transactional Π±ΡΠ΄ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΠΠ Π² Π²ΠΈΠ΄Π΅ ΡΠΈΠΊΠ»Π° ΠΈ Π±ΡΠ΄Π΅Ρ ΠΎΡΠΈΠ±ΠΊΠ° Ρ ΠΎΡΡ Π±Ρ Π² ΠΎΠ΄Π½ΠΎΠΌ - ΡΠΎ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° Π½Π΅ Π·Π°ΠΏΠΈΡΠ΅ΡΡΡ.
ΠΡΠΈΠΌΠ΅Ρ Π·Π°ΠΏΠΈΡΠΈ Π² Π²ΠΈΠ΄Π΅ ΡΠΈΠΊΠ»Π°:
@Transactional
public void book(String... persons) {
for (String person : persons) {
log.info("Booking " + person + " in a seat...");
jdbcTemplate.update("insert into BOOKINGS(FIRST_NAME) values (?)", person);
}
};
https://spring-projects.ru/guides/managing-transactions/
Π‘ Π²Π΅ΡΡΠΈΠΈ 3.1 Spring Π²Π²Π΅Π» Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ @EnableTransactionManagement, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Ρ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠ΅ΠΉ @Configuration Π½Π°Π΄ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΌΠΈ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ ΠΈ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ Π±Π΅ΡΡΠΎΠ²Π½ΠΎΠΉ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ ΡΠ΅ΡΠ΅Π· Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ @Transactional.
Π ΡΠ΅ Π·Π° Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ @Transactional ΠΈ ΠΏΠΎΡΠ΅ΠΌΡ Π±Π΅ΡΡΠΎΠ²Π½ΡΠ΅??
ΠΠ΅ΡΠΎΠ΄ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½ ΠΊΠ°ΠΊ @Transactional - ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΠΎΡΠΊΠ°Ρ Π²ΡΠ΅Ρ Π·Π°ΠΏΠΈΡΠ΅ΠΉ, Π΅ΡΠ»ΠΈ Π»ΡΠ±Π°Ρ ΠΈΠ· ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π²ΡΡΠ°Π²ΠΊΠΈ Π² ΡΡΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π΅ Π·Π°Π²Π΅ΡΡΠΈΡΡΡ Π½Π΅ΡΠ΄Π°ΡΠ΅ΠΉ, Π° ΡΠ°ΠΊΠΆΠ΅ Spring Π±ΡΠΎΡΠΈΡ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅.
ΠΠΠΠΠ: Π΅ΡΠ»ΠΈ Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ Ρ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠ΅ΠΉ @Transactional Π±ΡΠ΄ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΠΠ Π² Π²ΠΈΠ΄Π΅ ΡΠΈΠΊΠ»Π° ΠΈ Π±ΡΠ΄Π΅Ρ ΠΎΡΠΈΠ±ΠΊΠ° Ρ ΠΎΡΡ Π±Ρ Π² ΠΎΠ΄Π½ΠΎΠΌ - ΡΠΎ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° Π½Π΅ Π·Π°ΠΏΠΈΡΠ΅ΡΡΡ.
ΠΡΠΈΠΌΠ΅Ρ Π·Π°ΠΏΠΈΡΠΈ Π² Π²ΠΈΠ΄Π΅ ΡΠΈΠΊΠ»Π°:
@Transactional
public void book(String... persons) {
for (String person : persons) {
log.info("Booking " + person + " in a seat...");
jdbcTemplate.update("insert into BOOKINGS(FIRST_NAME) values (?)", person);
}
};
https://spring-projects.ru/guides/managing-transactions/
π3
#springscopes
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ
@Component
@Scope("prototype")
Π½Π°Π΄ ΠΊΠ»Π°ΡΡΠΎΠΌ, ΠΌΡ ΡΠΊΠ°ΠΆΠ΅ΠΌ, ΡΡΠΎ Π±ΠΈΠ½ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° Π±ΠΈΠ½ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ.
ΠΠΈΠΆΠ΅ ΡΠΏΠΈΡΠΎΠΊ ΠΎΠ±Π»Π°ΡΡΠ΅ΠΉ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠ΅ΠΉ, ΠΎΠΏΠΈΡΠ°Π½Π½ΡΡ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ:
singleton - ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. Π‘ΠΎΠ·Π΄Π°ΡΡΡΡ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ. ΠΠ»Ρ Π±ΠΈΠ½ΠΎΠ² Π±Π΅Π· ΡΠΎΡΡΠΎΡΠ½ΠΈΡ(stateless).
prototype - ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° Π±ΠΈΠ½ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ. ΠΠ»Ρ Π±ΠΈΠ½ΠΎΠ² Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ(stateful).
request - ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΌ HTTP Π·Π°ΠΏΡΠΎΡΠΎΠΌ. (web ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ)
session - ΠΆΠΈΠ·Π½Π΅Π½Π½ΡΠΉ ΡΠΈΠΊΠ» ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ ΡΠΎΠΉ ΠΆΠ΅ HTTP ΡΠ΅ΡΡΠΈΠΈ. (web-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ)
global session - ΠΆΠΈΠ·Π½Π΅Π½Π½ΡΠΉ ΡΠΈΠΊΠ» ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΉ HTTP ΡΠ΅ΡΡΠΈΠΈ. (web ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ)
application - ΠΆΠΈΠ·Π½Π΅Π½Π½ΡΠΉ ΡΠΈΠΊΠ» ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ ServletContext. (web ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ)
ΠΡΠΈΠΌΠ΅Ρ:
@Component
@Scope("prototype")
public class GreetingServiceImpl implements GreetingService {
//Π²ΠΊΡΡΠ½Π°Ρ Π½Π°ΡΠΈΠ½ΠΊΠ°
}
https://spring-projects.ru/guides/lessons/lesson-2/
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ
@Component
@Scope("prototype")
Π½Π°Π΄ ΠΊΠ»Π°ΡΡΠΎΠΌ, ΠΌΡ ΡΠΊΠ°ΠΆΠ΅ΠΌ, ΡΡΠΎ Π±ΠΈΠ½ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° Π±ΠΈΠ½ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ.
ΠΠΈΠΆΠ΅ ΡΠΏΠΈΡΠΎΠΊ ΠΎΠ±Π»Π°ΡΡΠ΅ΠΉ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠ΅ΠΉ, ΠΎΠΏΠΈΡΠ°Π½Π½ΡΡ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ:
singleton - ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. Π‘ΠΎΠ·Π΄Π°ΡΡΡΡ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ. ΠΠ»Ρ Π±ΠΈΠ½ΠΎΠ² Π±Π΅Π· ΡΠΎΡΡΠΎΡΠ½ΠΈΡ(stateless).
prototype - ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° Π±ΠΈΠ½ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ. ΠΠ»Ρ Π±ΠΈΠ½ΠΎΠ² Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ(stateful).
request - ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΌ HTTP Π·Π°ΠΏΡΠΎΡΠΎΠΌ. (web ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ)
session - ΠΆΠΈΠ·Π½Π΅Π½Π½ΡΠΉ ΡΠΈΠΊΠ» ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ ΡΠΎΠΉ ΠΆΠ΅ HTTP ΡΠ΅ΡΡΠΈΠΈ. (web-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ)
global session - ΠΆΠΈΠ·Π½Π΅Π½Π½ΡΠΉ ΡΠΈΠΊΠ» ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΉ HTTP ΡΠ΅ΡΡΠΈΠΈ. (web ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ)
application - ΠΆΠΈΠ·Π½Π΅Π½Π½ΡΠΉ ΡΠΈΠΊΠ» ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ ServletContext. (web ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ)
ΠΡΠΈΠΌΠ΅Ρ:
@Component
@Scope("prototype")
public class GreetingServiceImpl implements GreetingService {
//Π²ΠΊΡΡΠ½Π°Ρ Π½Π°ΡΠΈΠ½ΠΊΠ°
}
https://spring-projects.ru/guides/lessons/lesson-2/
π3
#springprofiles
ΠΡΠΎΡΠΈΠ»Ρ Π² ΡΠΏΡΠΈΠ½Π³Π΅ - ΡΡΠΎ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Π°Ρ Π³ΡΡΠΏΠΏΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ Π±ΠΈΠ½ΠΎΠ².
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ Π²Π°Ρ Π΅ΡΡΡ Π΄Π²Π° ΡΡΠ΅Π½Π΄Π°, testing Π΄Π»Ρ ΡΠ΅ΡΡΠΎΠ² ΠΈ production, Π³Π΄Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠΡΠΈ ΡΡΠΎΠΌ Ρ Π²Π°Ρ Π±ΡΠ΄ΡΡ ΡΠ°Π·Π»ΠΈΡΠ°ΡΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π² ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡΡ .
Π§ΡΠΎΠ±Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· Π½Π΅ ΠΏΠ΅ΡΠ΅ΡΠΎΠ±ΠΈΡΠ°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠΌΠΈ, ΠΈΠ·ΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΏΡΠΎΡΠΈΠ»ΠΈ:
@Configuration
public class AppConfig {
@Bean
@Profile("dev")
public DataSource devDataSource() {
// test options
}
@Bean
@Profile("production")
public DataSource productionDataSource() throws Exception {
// real options
}
}
ΠΠ°ΠΆΠ½ΠΎ!
ΠΡΠ»ΠΈ ΠΊΠ»Π°ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π°Π½Π½Π°ΡΠΈΡΠΎΠ²Π°Π½ @Profile({"p1", "p2"}), ΡΠΎ ΠΎΠ½Π° Π±ΡΠ΄Π΅Ρ Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ, Π΅ΡΠ»ΠΈ ΠΏΡΠΎΡΠΈΠ»ΠΈ "Ρ1" ΠΈ/ΠΈΠ»ΠΈ "Ρ2" Π±ΡΠ΄ΡΡ Π°ΠΊΡΠΈΠ²Π½Ρ. ΠΡΠΈ @Profile({"p1", "!p2"}) ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ, Π΅ΡΠ»ΠΈ ΠΏΡΠΎΡΠΈΠ»Ρ "Ρ1" Π°ΠΊΡΠΈΠ²Π΅Π½ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΠΈΠ»Ρ "Ρ2" Π½Π΅ Π°ΠΊΡΠΈΠ²Π΅Π½.
https://spring-projects.ru/guides/lessons/lesson-2/
ΠΡΠΎΡΠΈΠ»Ρ Π² ΡΠΏΡΠΈΠ½Π³Π΅ - ΡΡΠΎ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Π°Ρ Π³ΡΡΠΏΠΏΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ Π±ΠΈΠ½ΠΎΠ².
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ Π²Π°Ρ Π΅ΡΡΡ Π΄Π²Π° ΡΡΠ΅Π½Π΄Π°, testing Π΄Π»Ρ ΡΠ΅ΡΡΠΎΠ² ΠΈ production, Π³Π΄Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠΡΠΈ ΡΡΠΎΠΌ Ρ Π²Π°Ρ Π±ΡΠ΄ΡΡ ΡΠ°Π·Π»ΠΈΡΠ°ΡΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π² ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡΡ .
Π§ΡΠΎΠ±Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· Π½Π΅ ΠΏΠ΅ΡΠ΅ΡΠΎΠ±ΠΈΡΠ°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠΌΠΈ, ΠΈΠ·ΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΏΡΠΎΡΠΈΠ»ΠΈ:
@Configuration
public class AppConfig {
@Bean
@Profile("dev")
public DataSource devDataSource() {
// test options
}
@Bean
@Profile("production")
public DataSource productionDataSource() throws Exception {
// real options
}
}
ΠΠ°ΠΆΠ½ΠΎ!
ΠΡΠ»ΠΈ ΠΊΠ»Π°ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π°Π½Π½Π°ΡΠΈΡΠΎΠ²Π°Π½ @Profile({"p1", "p2"}), ΡΠΎ ΠΎΠ½Π° Π±ΡΠ΄Π΅Ρ Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ, Π΅ΡΠ»ΠΈ ΠΏΡΠΎΡΠΈΠ»ΠΈ "Ρ1" ΠΈ/ΠΈΠ»ΠΈ "Ρ2" Π±ΡΠ΄ΡΡ Π°ΠΊΡΠΈΠ²Π½Ρ. ΠΡΠΈ @Profile({"p1", "!p2"}) ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ, Π΅ΡΠ»ΠΈ ΠΏΡΠΎΡΠΈΠ»Ρ "Ρ1" Π°ΠΊΡΠΈΠ²Π΅Π½ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΠΈΠ»Ρ "Ρ2" Π½Π΅ Π°ΠΊΡΠΈΠ²Π΅Π½.
https://spring-projects.ru/guides/lessons/lesson-2/