Π§ΡΠΎ Π±ΡΠ΄Π΅Ρ Π²ΡΠ²Π΅Π΄Π΅Π½ΠΎ Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»Ρ?
Anonymous Quiz
47%
true
34%
false
6%
ΠΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·Π°ΡΡ
13%
ΠΠΎΠ΄ Π½Π΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ
π5
Π‘ΡΠ°Π²Π½ΠΈΡΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ Spring Data
ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΡΠ°ΡΡΡ ΡΠ°Π±ΠΎΡΡ Π² Spring Data ΡΡΡΠΎΠΈΡΡΡ Π²ΠΎΠΊΡΡΠ³ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Repository. ΠΡΠΎ ΠΌΠ°ΡΠΊΠ΅ΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ. ΠΡ Π½Π΅Π³ΠΎ Π½Π°ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ-ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΆΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΠΌΠ΅ΡΠΎΠ΄Ρ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΡΡΠ½ΠΎΡΡΡΠΌΠΈ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . ΠΡΠ΅ ΡΡΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΡΡΡΡΡ Π΄Π²ΡΠΌΡ ΡΠΈΠΏΠ°ΠΌΠΈ: ΡΠ°ΠΌΠΎΠΉ ΡΡΡΠ½ΠΎΡΡΠΈ ΠΈ Π΅Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°.
CrudRepository β Π±Π°Π·ΠΎΠ²ΡΠΉ Π½Π°Π±ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π½Π°Π΄ ΡΡΡΠ½ΠΎΡΡΡΠΌΠΈ: ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅, ΡΡΠ΅Π½ΠΈΠ΅, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ (CRUD).
PagingAndSortingRepository β Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΠΊ CRUD Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΡΡΡΠ°Π½ΠΈΡΠ½ΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π΄Π°Π½Π½ΡΡ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΎΠΉ.
JpaRepository β ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ PagingAndSortingRepository, ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠ΅Π΅ Java Persistence API. ΠΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΡΡΠ΄ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ flush ΠΈ deleteInBatch.
MongoRepository β ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ PagingAndSortingRepository, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΎΠ΅ Π΄Π»Ρ MongoDB.
ΠΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΠ΅ Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π°Π½Π½ΡΡ , Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΡΡ Π² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ-Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠΈ. ΠΡΠ½ΠΎΠ²ΡΠ²Π°ΡΡΡ Π½Π° ΠΈΠΌΠ΅Π½Π°Ρ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ ΡΠ°ΠΌ ΡΠΎΠ·Π΄Π°ΡΡ ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ.
ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΡΠ°ΡΡΡ ΡΠ°Π±ΠΎΡΡ Π² Spring Data ΡΡΡΠΎΠΈΡΡΡ Π²ΠΎΠΊΡΡΠ³ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Repository. ΠΡΠΎ ΠΌΠ°ΡΠΊΠ΅ΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ. ΠΡ Π½Π΅Π³ΠΎ Π½Π°ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ-ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΆΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΠΌΠ΅ΡΠΎΠ΄Ρ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΡΡΠ½ΠΎΡΡΡΠΌΠΈ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . ΠΡΠ΅ ΡΡΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΡΡΡΡΡ Π΄Π²ΡΠΌΡ ΡΠΈΠΏΠ°ΠΌΠΈ: ΡΠ°ΠΌΠΎΠΉ ΡΡΡΠ½ΠΎΡΡΠΈ ΠΈ Π΅Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°.
CrudRepository β Π±Π°Π·ΠΎΠ²ΡΠΉ Π½Π°Π±ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π½Π°Π΄ ΡΡΡΠ½ΠΎΡΡΡΠΌΠΈ: ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅, ΡΡΠ΅Π½ΠΈΠ΅, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ (CRUD).
PagingAndSortingRepository β Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΠΊ CRUD Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΡΡΡΠ°Π½ΠΈΡΠ½ΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π΄Π°Π½Π½ΡΡ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΎΠΉ.
JpaRepository β ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ PagingAndSortingRepository, ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠ΅Π΅ Java Persistence API. ΠΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΡΡΠ΄ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ flush ΠΈ deleteInBatch.
MongoRepository β ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ PagingAndSortingRepository, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΎΠ΅ Π΄Π»Ρ MongoDB.
ΠΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΠ΅ Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π°Π½Π½ΡΡ , Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΡΡ Π² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ-Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠΈ. ΠΡΠ½ΠΎΠ²ΡΠ²Π°ΡΡΡ Π½Π° ΠΈΠΌΠ΅Π½Π°Ρ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ ΡΠ°ΠΌ ΡΠΎΠ·Π΄Π°ΡΡ ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ.
π26β‘2β€1
Π§ΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π°?
Anonymous Quiz
6%
ΠΡΠ΄Π΅Ρ Π½Π°ΠΏΠ΅ΡΠ°ΡΠ°Π½ΠΎ "null" Π±Π΅Π· ΠΊΠ°Π²ΡΡΠ΅ΠΊ
46%
ΠΡΠ΄Π΅Ρ Π½Π°ΠΏΠ΅ΡΠ°ΡΠ°Π½ΠΎ "90" Π±Π΅Π· ΠΊΠ°Π²ΡΡΠ΅ΠΊ
12%
ΠΡΠ΄Π΅Ρ Π½Π°ΠΏΠ΅ΡΠ°ΡΠ°Π½ΠΎ "8" Π±Π΅Π· ΠΊΠ°Π²ΡΡΠ΅ΠΊ
7%
ΠΡΠ΄Π΅Ρ Π½Π°ΠΏΠ΅ΡΠ°ΡΠ°Π½ΠΎ "0" Π±Π΅Π· ΠΊΠ°Π²ΡΡΠ΅ΠΊ
27%
ΠΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ ΠΎΡΠΈΠ±ΠΊΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ
3%
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΠ³Π°Π΄Π°ΡΡ
π€9π8β€3π’1
ΠΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Aware ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Π² Spring?
Π Spring Framework ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Β«Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ Β» (Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΡΠΊΠΎΡΠΏΠ°) ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ-ΡΠΈΠ½Π³Π»ΡΠΎΠ½ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ Π±ΠΈΠ½Π°ΠΌΠΈ. ΠΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ, Π²ΡΠ΅ ΡΡΠ°Π·Ρ ΠΎΠ½ΠΈ Π½Π΅ Π½ΡΠΆΠ½Ρ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΌΡ Π±ΠΈΠ½Ρ, ΠΎΠ±ΡΡΠ½ΡΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ Π½ΠΈΡ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. ΠΠΎ ΡΠ΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°ΡΡ ΡΠΏΠΎΡΠΎΠ± Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡΡ.
ΠΠ°ΡΠΊΠ΅ΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Aware ΡΠ»ΡΠΆΠΈΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΌ Π±ΠΎΠ»ΡΡΠΎΠΌΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² Ρ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ *Aware. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· Π½ΠΈΡ , ΠΏΡΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π±ΠΈΠ½Ρ ΠΊΠ°ΠΊΡΡ-ΡΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΡ Π΄Π»Ρ ΡΠ΅Π±Ρ ΡΡΡΠ½ΠΎΡΡΡ. Π’Π°ΠΊ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ, ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π½ΡΠΆΠ½ΠΎ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ ΠΊ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ApplicationContextAware.
Π’Π΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ, ΡΠ°ΠΌΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°ΡΡ. ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ FooAware ΠΎΠ±ΡΡΠ½ΠΎ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅Ρ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ void setFoo(Foo value). Π§Π΅ΡΠ΅Π· ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ BeanPostProcessor ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π² Π±ΠΈΠ½ Π½ΡΠΆΠ½ΡΡ ΡΡΡΠ½ΠΎΡΡΡ.
ΠΡΠ»ΠΈ Π±ΠΈΠ½ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ServletContextAware, ΡΠΎ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π±ΠΈΠ½Π° ΠΊ Π½Π΅ΠΌΡ ΠΏΡΠΈΠ΄Π΅Ρ ServletContextAwareProcessor, ΠΈ Π²ΡΠ·ΠΎΠ²Π΅Ρ setServletContext Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠΌ ΡΠ΅ΡΠ²Π»Π΅ΡΠ° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°.
Π Spring Framework ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Β«Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ Β» (Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΡΠΊΠΎΡΠΏΠ°) ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ-ΡΠΈΠ½Π³Π»ΡΠΎΠ½ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ Π±ΠΈΠ½Π°ΠΌΠΈ. ΠΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ, Π²ΡΠ΅ ΡΡΠ°Π·Ρ ΠΎΠ½ΠΈ Π½Π΅ Π½ΡΠΆΠ½Ρ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΌΡ Π±ΠΈΠ½Ρ, ΠΎΠ±ΡΡΠ½ΡΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ Π½ΠΈΡ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. ΠΠΎ ΡΠ΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°ΡΡ ΡΠΏΠΎΡΠΎΠ± Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡΡ.
ΠΠ°ΡΠΊΠ΅ΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Aware ΡΠ»ΡΠΆΠΈΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΌ Π±ΠΎΠ»ΡΡΠΎΠΌΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² Ρ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ *Aware. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· Π½ΠΈΡ , ΠΏΡΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π±ΠΈΠ½Ρ ΠΊΠ°ΠΊΡΡ-ΡΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΡ Π΄Π»Ρ ΡΠ΅Π±Ρ ΡΡΡΠ½ΠΎΡΡΡ. Π’Π°ΠΊ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ, ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π½ΡΠΆΠ½ΠΎ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ ΠΊ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ApplicationContextAware.
Π’Π΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ, ΡΠ°ΠΌΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°ΡΡ. ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ FooAware ΠΎΠ±ΡΡΠ½ΠΎ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅Ρ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ void setFoo(Foo value). Π§Π΅ΡΠ΅Π· ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ BeanPostProcessor ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π² Π±ΠΈΠ½ Π½ΡΠΆΠ½ΡΡ ΡΡΡΠ½ΠΎΡΡΡ.
ΠΡΠ»ΠΈ Π±ΠΈΠ½ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ServletContextAware, ΡΠΎ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π±ΠΈΠ½Π° ΠΊ Π½Π΅ΠΌΡ ΠΏΡΠΈΠ΄Π΅Ρ ServletContextAwareProcessor, ΠΈ Π²ΡΠ·ΠΎΠ²Π΅Ρ setServletContext Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠΌ ΡΠ΅ΡΠ²Π»Π΅ΡΠ° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°.
π16π€¨4β€1
ΠΠ°ΠΊΠ°Ρ ΡΠ°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ @β Controller ΠΈ @β RestController?
Controller β ΡΡΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΡΠ΅ΡΠ΅ΠΎΡΠΈΠΏΠΎΠ² Spring Framework. ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΎΠ±ΡΡΠ½ΠΎ Π·Π°Π½ΠΈΠΌΠ°ΡΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ ΡΠ΅ΡΠ΅Π²ΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ². ΠΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π½Π°Π±ΠΎΡΠ° ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²-ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ², ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Π½ΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠ΅ΠΉ @RequestMapping.
ΠΡΠ²Π΅Ρ Π½Π° Π·Π°ΠΏΡΠΎΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ: Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΎΡΡΠΎ Π²Π΅ΡΠ½ΡΡΡ ΠΈΠ· ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΡΡΡΠΎΠΊΡ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ jsp-ΡΠ°ΠΉΠ»Π°, ΠΈΠ»ΠΈ ΠΆΠ΅ Π²Π΅ΡΠ½ΡΡΡ ResponseBodyEmitter, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ Π·Π°ΠΏΠΎΠ»Π½ΡΡΡΡΡ Π΄Π°Π½Π½ΡΠΌΠΈ ΠΏΠΎΠ·ΠΆΠ΅. ΠΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Ρ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ.
ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ API ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ ΠΏΠΎ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ΅ REST. Π Π½Π΅ΠΉ ΠΊΠ°ΠΆΠ΄Π°Ρ ΡΡΡΠ½ΠΎΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½Π° ΠΏΠΎΠ΄ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΌ URI. Π ΠΌΠ΅ΡΠΎΠ΄Π΅-ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° ΡΡΠΎΠΉ ΡΡΡΠ½ΠΎΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ Π² ΠΎΡΠ²Π΅Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· HttpMessageConverter-ΠΎΠ². ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² JSON Π΅Π³ΠΎ ΠΏΡΠ΅Π²ΡΠ°ΡΠΈΡ MappingJackson2HttpMessageConverter. Π§ΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎΡ ΡΠΏΠΎΡΠΎΠ± ΠΎΡΠ²Π΅ΡΠ°, ΠΌΠ΅ΡΠΎΠ΄, ΠΈΠ»ΠΈ Π²Π΅ΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅ΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ @ResponseBody.
@RestController β ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ ΡΠΎΠΊΡΠ°ΡΠ΅Π½Π½Π°Ρ Π·Π°ΠΏΠΈΡΡ Π΄Π»Ρ @Controller + @ResponseBody.
Controller β ΡΡΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΡΠ΅ΡΠ΅ΠΎΡΠΈΠΏΠΎΠ² Spring Framework. ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΎΠ±ΡΡΠ½ΠΎ Π·Π°Π½ΠΈΠΌΠ°ΡΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ ΡΠ΅ΡΠ΅Π²ΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ². ΠΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π½Π°Π±ΠΎΡΠ° ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²-ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ², ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Π½ΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠ΅ΠΉ @RequestMapping.
ΠΡΠ²Π΅Ρ Π½Π° Π·Π°ΠΏΡΠΎΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ: Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΎΡΡΠΎ Π²Π΅ΡΠ½ΡΡΡ ΠΈΠ· ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΡΡΡΠΎΠΊΡ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ jsp-ΡΠ°ΠΉΠ»Π°, ΠΈΠ»ΠΈ ΠΆΠ΅ Π²Π΅ΡΠ½ΡΡΡ ResponseBodyEmitter, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ Π·Π°ΠΏΠΎΠ»Π½ΡΡΡΡΡ Π΄Π°Π½Π½ΡΠΌΠΈ ΠΏΠΎΠ·ΠΆΠ΅. ΠΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Ρ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ.
ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ API ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ ΠΏΠΎ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ΅ REST. Π Π½Π΅ΠΉ ΠΊΠ°ΠΆΠ΄Π°Ρ ΡΡΡΠ½ΠΎΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½Π° ΠΏΠΎΠ΄ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΌ URI. Π ΠΌΠ΅ΡΠΎΠ΄Π΅-ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° ΡΡΠΎΠΉ ΡΡΡΠ½ΠΎΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ Π² ΠΎΡΠ²Π΅Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· HttpMessageConverter-ΠΎΠ². ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² JSON Π΅Π³ΠΎ ΠΏΡΠ΅Π²ΡΠ°ΡΠΈΡ MappingJackson2HttpMessageConverter. Π§ΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎΡ ΡΠΏΠΎΡΠΎΠ± ΠΎΡΠ²Π΅ΡΠ°, ΠΌΠ΅ΡΠΎΠ΄, ΠΈΠ»ΠΈ Π²Π΅ΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅ΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ @ResponseBody.
@RestController β ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ ΡΠΎΠΊΡΠ°ΡΠ΅Π½Π½Π°Ρ Π·Π°ΠΏΠΈΡΡ Π΄Π»Ρ @Controller + @ResponseBody.
π30π₯3β€1
Π§ΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π°?
Anonymous Quiz
12%
ΠΡΠ²ΠΎΠ΄ Π΄Π²ΡΡ
ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ - "Hello World"
15%
ΠΡΠ²ΠΎΠ΄ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ - "Hello World"
54%
ΠΡΠ²ΠΎΠ΄ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ "Hello World" Π΄ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΊΠΈ StackOverflowError
19%
ΠΡΠΈΠ±ΠΊΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ.
π23πΎ4
ΠΠ°ΠΊ Π²ΡΠ·Π²Π°ΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΎΠ½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΈΠ· ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΊΠ»Π°ΡΡΠ°?
Π Spring Framework ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ @Transactional. ΠΠΉ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΈΠ»ΠΈ ΠΊΠ»Π°ΡΡ, Π²Π΅ΡΡ ΠΊΠΎΠ΄ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ. ΠΠ±ΡΡΠ½ΠΎ ΠΈΠΌΠ΅Π΅ΡΡΡ Π² Π²ΠΈΠ΄Ρ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , Π½ΠΎ Π²ΠΎΠΎΠ±ΡΠ΅ ΡΡΠΎ ΠΏΠΎΠ½ΡΡΠΈΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΌ transactionManager-ΠΎΠΌ. ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΡΡΠΎΠ²Π΅Π½Ρ ΠΈΠ·ΠΎΠ»ΡΡΠΈΠΈ, ΡΡΡΠ°ΡΠ΅Π³ΠΈΡ ΡΠΎΠ»Π»Π±ΡΠΊΠ° ΠΈ ΠΏΡΠΎΡΠΈΠ΅, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ ΡΠ΅ΡΠ΅Π· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΡΠΎΠΉ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ.
Π ΡΠ΅ΠΎΡΠΈΠΈ, @Transactional Π΄Π΅Π»Π°Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΎΠ½Π½ΡΠΌ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΈ Π²ΡΠ΅Ρ Π΅Π³ΠΎ Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠΎΠ². ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΠΆΠ΅, ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π΅ΡΠ»ΠΈ Π²ΡΠ·Π²Π°ΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΎΠ½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Foo.bar() ΠΈΠ· Foo.baz(), ΡΠΎ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ Π½Π΅ ΡΠΎΠ·Π΄Π°ΡΡΡΡ.
ΠΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π²ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Spring AOP Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΠΊΠΎΠ΄ ΠΎΡΠΊΡΡΡΠΈΡ/Π·Π°ΠΊΡΡΡΠΈΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ΡΠ΅ΡΠ΅Π· Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ proxy ΠΊΠ»Π°ΡΡ. Π’ΠΎ Π΅ΡΡΡ, Π²ΠΌΠ΅ΡΡΠΎ Foo ΠΈΠ½Π΄ΠΆΠ΅ΠΊΡΠΈΡΡΡ Π½Π΅ΡΡΠΎ, ΠΏΠΎΡ ΠΎΠΆΠ΅Π΅ Π½Π° ΠΊΠΎΠ΄ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ.
ΠΠ΅ΡΠ²ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ β Π²ΠΌΠ΅ΡΡΠΎ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ TransactionTemplate, ΡΠΎ Π΅ΡΡΡ ΠΎΠ±Π΅ΡΠ½ΡΡΡ ΠΊΠΎΠ΄ Π² ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ Π²ΡΡΡΠ½ΡΡ. ΠΡΠΈΠΌΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π² ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅.
ΠΡΡΠ³ΠΎΠΉ, Π±ΠΎΠ»Π΅Π΅ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΉ, Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΠΉ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΡΠΏΠΎΡΠΎΠ± β ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΡ ΡΠ΅ΠΆΠΈΠΌ ΡΠ°Π±ΠΎΡΡ Spring AOP Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΡΠΎΠΊΡΠΈ Π½Π° Π½Π΅ΡΡΠΎ Π΄ΡΡΠ³ΠΎΠ΅. ΠΠ±ΡΡΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° AspectJ:
Π Spring AOP Π΅ΡΡΡ ΠΏΠΎΠ½ΡΡΠΈΠ΅ weaving β ΡΡΠ°ΠΏ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ (Π°ΡΠΏΠ΅ΠΊΡΠΎΠ²). Π Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅, ΡΡΠΎ ΠΊΠΎΠ΄ ΠΎΡΠΊΡΡΡΠΈΡ/Π·Π°ΠΊΡΡΡΠΈΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ. Π§ΡΠΎΠ±Ρ Π·Π°ΡΠ°Π±ΠΎΡΠ°Π» weaving AspectJ ΡΡΠ°ΠΏΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, Π² ΡΠ±ΠΎΡΠΊΡ Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠ»Π°Π³ΠΈΠ½: aspectj-maven-plugin Π΄Π»Ρ maven, gradle-aspectj Π΄Π»Ρ gradle.
ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎΠ± ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Ρ Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠ΅ΠΆΠΈΠΌΠ°ΠΌΠΈ Spring AOP ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΈΡΠ°ΡΡ Π² ΡΡΠ°ΡΡΠ΅ Π½Π° Ρ Π°Π±ΡΠ΅.
Π Spring Framework ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ @Transactional. ΠΠΉ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΈΠ»ΠΈ ΠΊΠ»Π°ΡΡ, Π²Π΅ΡΡ ΠΊΠΎΠ΄ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ. ΠΠ±ΡΡΠ½ΠΎ ΠΈΠΌΠ΅Π΅ΡΡΡ Π² Π²ΠΈΠ΄Ρ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , Π½ΠΎ Π²ΠΎΠΎΠ±ΡΠ΅ ΡΡΠΎ ΠΏΠΎΠ½ΡΡΠΈΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΌ transactionManager-ΠΎΠΌ. ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΡΡΠΎΠ²Π΅Π½Ρ ΠΈΠ·ΠΎΠ»ΡΡΠΈΠΈ, ΡΡΡΠ°ΡΠ΅Π³ΠΈΡ ΡΠΎΠ»Π»Π±ΡΠΊΠ° ΠΈ ΠΏΡΠΎΡΠΈΠ΅, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ ΡΠ΅ΡΠ΅Π· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΡΠΎΠΉ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ.
Π ΡΠ΅ΠΎΡΠΈΠΈ, @Transactional Π΄Π΅Π»Π°Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΎΠ½Π½ΡΠΌ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΈ Π²ΡΠ΅Ρ Π΅Π³ΠΎ Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠΎΠ². ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΠΆΠ΅, ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π΅ΡΠ»ΠΈ Π²ΡΠ·Π²Π°ΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΎΠ½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Foo.bar() ΠΈΠ· Foo.baz(), ΡΠΎ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ Π½Π΅ ΡΠΎΠ·Π΄Π°ΡΡΡΡ.
ΠΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π²ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Spring AOP Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΠΊΠΎΠ΄ ΠΎΡΠΊΡΡΡΠΈΡ/Π·Π°ΠΊΡΡΡΠΈΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ΡΠ΅ΡΠ΅Π· Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ proxy ΠΊΠ»Π°ΡΡ. Π’ΠΎ Π΅ΡΡΡ, Π²ΠΌΠ΅ΡΡΠΎ Foo ΠΈΠ½Π΄ΠΆΠ΅ΠΊΡΠΈΡΡΡ Π½Π΅ΡΡΠΎ, ΠΏΠΎΡ ΠΎΠΆΠ΅Π΅ Π½Π° ΠΊΠΎΠ΄ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ.
ΠΠ΅ΡΠ²ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ β Π²ΠΌΠ΅ΡΡΠΎ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ TransactionTemplate, ΡΠΎ Π΅ΡΡΡ ΠΎΠ±Π΅ΡΠ½ΡΡΡ ΠΊΠΎΠ΄ Π² ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ Π²ΡΡΡΠ½ΡΡ. ΠΡΠΈΠΌΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π² ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅.
ΠΡΡΠ³ΠΎΠΉ, Π±ΠΎΠ»Π΅Π΅ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΉ, Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΠΉ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΡΠΏΠΎΡΠΎΠ± β ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΡ ΡΠ΅ΠΆΠΈΠΌ ΡΠ°Π±ΠΎΡΡ Spring AOP Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΡΠΎΠΊΡΠΈ Π½Π° Π½Π΅ΡΡΠΎ Π΄ΡΡΠ³ΠΎΠ΅. ΠΠ±ΡΡΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° AspectJ:
@EnableTransactionManagement(mode = AdviceMode.ASPECTJ)
Π Spring AOP Π΅ΡΡΡ ΠΏΠΎΠ½ΡΡΠΈΠ΅ weaving β ΡΡΠ°ΠΏ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ (Π°ΡΠΏΠ΅ΠΊΡΠΎΠ²). Π Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅, ΡΡΠΎ ΠΊΠΎΠ΄ ΠΎΡΠΊΡΡΡΠΈΡ/Π·Π°ΠΊΡΡΡΠΈΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ. Π§ΡΠΎΠ±Ρ Π·Π°ΡΠ°Π±ΠΎΡΠ°Π» weaving AspectJ ΡΡΠ°ΠΏΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, Π² ΡΠ±ΠΎΡΠΊΡ Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠ»Π°Π³ΠΈΠ½: aspectj-maven-plugin Π΄Π»Ρ maven, gradle-aspectj Π΄Π»Ρ gradle.
ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎΠ± ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Ρ Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠ΅ΠΆΠΈΠΌΠ°ΠΌΠΈ Spring AOP ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΈΡΠ°ΡΡ Π² ΡΡΠ°ΡΡΠ΅ Π½Π° Ρ Π°Π±ΡΠ΅.
π21β€3
ΠΠΏΠΈΡΠΈΡΠ΅ ΠΆΠΈΠ·Π½Π΅Π½Π½ΡΠΉ ΡΠΈΠΊΠ» Spring Bean
Beans β ΡΠ΅Π½ΡΡΠ°Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π·Π°Π±ΠΎΡΡ Spring Framework. ΠΠ° ΠΊΡΠ»ΠΈΡΠ°ΠΌΠΈ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ° Ρ Π½ΠΈΠΌΠΈ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ². ΠΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΌΠ΅ΡΠ°ΡΡΡΡ, Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ Π»ΠΎΠ³ΠΈΠΊΡ Π² ΡΠ°Π·Π½ΡΠ΅ ΡΡΠ°ΠΏΡ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΊΠ»Π°. Π§Π΅ΡΠ΅Π· ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΠ°ΠΏΡ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ Π²Π·ΡΡΡΠΉ Π±ΠΈΠ½:
1. ΠΠ½ΡΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. Π’Π΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π½Π°ΡΠ°Π»ΠΎ ΠΆΠΈΠ·Π½ΠΈ Π±ΠΈΠ½Π°, ΡΠ°Π±ΠΎΡΠ° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° Π΅Π³ΠΎ ΠΊΠ»Π°ΡΡΠ°;
2. Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ²ΠΎΠΉΡΡΠ² ΠΈΠ· ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π±ΠΈΠ½Π°, Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ;
3. ΠΠΎΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ aware-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ². BeanNameAware, BeanFactoryAware ΠΈ Π΄ΡΡΠ³ΠΈΠ΅. ΠΡ ΡΠΆΠ΅ ΠΏΠΈΡΠ°Π»ΠΈ ΠΎ ΡΠ°ΠΊΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°Ρ ΡΠ°Π½Π΅Π΅. Π’Π΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΌΠΈ ΠΏΠΎΠ΄ΡΠΈΠΏΠ°ΠΌΠΈ BeanPostProcessor, ΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ ΡΠ°Π³ΠΎΠΌ 4;
4. ΠΡΠ΅-ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ β ΠΌΠ΅ΡΠΎΠ΄ postProcessBeforeInitialization() ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° BeanPostProcessor;
5. ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ. Π Π°Π·Π½ΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ Π² ΡΠ°ΠΊΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅:
β’ ΠΠ΅ΡΠΎΠ΄ Π±ΠΈΠ½Π° Ρ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠ΅ΠΉ @PostConstruct ΠΈΠ· ΡΡΠ°Π½Π΄Π°ΡΡΠ° JSR-250 (ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌΡΠΉ ΡΠΏΠΎΡΠΎΠ±);
β’ ΠΠ΅ΡΠΎΠ΄ afterPropertiesSet() Π±ΠΈΠ½Π° ΠΏΠΎΠ΄ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ InitializingBean;
β’ Init-ΠΌΠ΅ΡΠΎΠ΄. ΠΠ»Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ Π±ΠΈΠ½Π° Π΅Π³ΠΎ ΠΈΠΌΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ initMethod. Π xml-ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π΄Π»Ρ Π²ΡΠ΅Ρ Π±ΠΈΠ½ΠΎΠ² ΡΡΠ°Π·Ρ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ default-init-method;
6. ΠΠΎΡΡ-ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ β ΠΌΠ΅ΡΠΎΠ΄ postProcessAfterInitialization() ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° BeanPostProcessor.
ΠΠΎΠ³Π΄Π° IoC-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π·Π°Π²Π΅ΡΡΠ°Π΅Ρ ΡΠ²ΠΎΡ ΡΠ°Π±ΠΎΡΡ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΊΠ°ΡΡΠΎΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ°ΠΏ ΡΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΡΠ½ΠΈΡΡΠΎΠΆΠ΅Π½ΠΈΡ Π±ΠΈΠ½Π°. ΠΠ°ΠΊ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ ΡΠΈΠ½Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π² Java, ΠΏΡΠΈ ΠΆΠ΅ΡΡΠΊΠΎΠΌ Π²ΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ (kill -9) Π³Π°ΡΠ°Π½ΡΠΈΠΈ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠΎΠ³ΠΎ ΡΡΠ°ΠΏΠ° Π½Π΅Ρ. Π’ΡΠΈ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΡ ΡΠΏΠΎΡΠΎΠ±Π° Β«Π΄Π΅ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈΒ» Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Π² ΡΠΎΠΌ ΠΆΠ΅ ΠΏΠΎΡΡΠ΄ΠΊΠ΅, ΡΡΠΎ ΡΠΈΠΌΠΌΠ΅ΡΡΠΈΡΠ½ΡΠ΅ ΠΈΠΌ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ:
1. ΠΠ΅ΡΠΎΠ΄ Ρ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠ΅ΠΉ @PreDestroy;
2. ΠΠ΅ΡΠΎΠ΄ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ²ΠΎΠΉΡΡΠ²Π΅ destroyMethod ΠΎΠΏΡΠ΅Π΄Π΅Π»Π½ΠΈΡ Π±ΠΈΠ½Π° (ΠΈΠ»ΠΈ Π² Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΌ default-destroy-method);
3. ΠΠ΅ΡΠΎΠ΄ destroy() ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° DisposableBean.
ΠΠ΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΡΡΠ°ΡΡ ΠΆΠΈΠ·Π½Π΅Π½Π½ΡΠΉ ΡΠΈΠΊΠ» ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ Π±ΠΈΠ½Π° Ρ ΠΆΠΈΠ·Π½Π΅Π½Π½ΡΠΌ ΡΠΈΠΊΠ»ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΠΈ ΡΡΠ°ΠΏΠ°ΠΌΠΈ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ ΡΠ°Π±ΡΠΈΠΊ Π±ΠΈΠ½ΠΎΠ². Π Π½ΠΈΡ ΠΌΡ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ Π² Π±ΡΠ΄ΡΡΠΈΡ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡΡ .
Beans β ΡΠ΅Π½ΡΡΠ°Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π·Π°Π±ΠΎΡΡ Spring Framework. ΠΠ° ΠΊΡΠ»ΠΈΡΠ°ΠΌΠΈ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ° Ρ Π½ΠΈΠΌΠΈ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ². ΠΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΌΠ΅ΡΠ°ΡΡΡΡ, Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ Π»ΠΎΠ³ΠΈΠΊΡ Π² ΡΠ°Π·Π½ΡΠ΅ ΡΡΠ°ΠΏΡ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΊΠ»Π°. Π§Π΅ΡΠ΅Π· ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΠ°ΠΏΡ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ Π²Π·ΡΡΡΠΉ Π±ΠΈΠ½:
1. ΠΠ½ΡΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. Π’Π΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π½Π°ΡΠ°Π»ΠΎ ΠΆΠΈΠ·Π½ΠΈ Π±ΠΈΠ½Π°, ΡΠ°Π±ΠΎΡΠ° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° Π΅Π³ΠΎ ΠΊΠ»Π°ΡΡΠ°;
2. Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ²ΠΎΠΉΡΡΠ² ΠΈΠ· ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π±ΠΈΠ½Π°, Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ;
3. ΠΠΎΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ aware-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ². BeanNameAware, BeanFactoryAware ΠΈ Π΄ΡΡΠ³ΠΈΠ΅. ΠΡ ΡΠΆΠ΅ ΠΏΠΈΡΠ°Π»ΠΈ ΠΎ ΡΠ°ΠΊΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°Ρ ΡΠ°Π½Π΅Π΅. Π’Π΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΌΠΈ ΠΏΠΎΠ΄ΡΠΈΠΏΠ°ΠΌΠΈ BeanPostProcessor, ΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ ΡΠ°Π³ΠΎΠΌ 4;
4. ΠΡΠ΅-ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ β ΠΌΠ΅ΡΠΎΠ΄ postProcessBeforeInitialization() ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° BeanPostProcessor;
5. ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ. Π Π°Π·Π½ΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ Π² ΡΠ°ΠΊΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅:
β’ ΠΠ΅ΡΠΎΠ΄ Π±ΠΈΠ½Π° Ρ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠ΅ΠΉ @PostConstruct ΠΈΠ· ΡΡΠ°Π½Π΄Π°ΡΡΠ° JSR-250 (ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌΡΠΉ ΡΠΏΠΎΡΠΎΠ±);
β’ ΠΠ΅ΡΠΎΠ΄ afterPropertiesSet() Π±ΠΈΠ½Π° ΠΏΠΎΠ΄ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ InitializingBean;
β’ Init-ΠΌΠ΅ΡΠΎΠ΄. ΠΠ»Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ Π±ΠΈΠ½Π° Π΅Π³ΠΎ ΠΈΠΌΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ initMethod. Π xml-ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π΄Π»Ρ Π²ΡΠ΅Ρ Π±ΠΈΠ½ΠΎΠ² ΡΡΠ°Π·Ρ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ default-init-method;
6. ΠΠΎΡΡ-ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ β ΠΌΠ΅ΡΠΎΠ΄ postProcessAfterInitialization() ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° BeanPostProcessor.
ΠΠΎΠ³Π΄Π° IoC-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π·Π°Π²Π΅ΡΡΠ°Π΅Ρ ΡΠ²ΠΎΡ ΡΠ°Π±ΠΎΡΡ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΊΠ°ΡΡΠΎΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ°ΠΏ ΡΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΡΠ½ΠΈΡΡΠΎΠΆΠ΅Π½ΠΈΡ Π±ΠΈΠ½Π°. ΠΠ°ΠΊ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ ΡΠΈΠ½Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π² Java, ΠΏΡΠΈ ΠΆΠ΅ΡΡΠΊΠΎΠΌ Π²ΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ (kill -9) Π³Π°ΡΠ°Π½ΡΠΈΠΈ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠΎΠ³ΠΎ ΡΡΠ°ΠΏΠ° Π½Π΅Ρ. Π’ΡΠΈ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΡ ΡΠΏΠΎΡΠΎΠ±Π° Β«Π΄Π΅ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈΒ» Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Π² ΡΠΎΠΌ ΠΆΠ΅ ΠΏΠΎΡΡΠ΄ΠΊΠ΅, ΡΡΠΎ ΡΠΈΠΌΠΌΠ΅ΡΡΠΈΡΠ½ΡΠ΅ ΠΈΠΌ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ:
1. ΠΠ΅ΡΠΎΠ΄ Ρ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠ΅ΠΉ @PreDestroy;
2. ΠΠ΅ΡΠΎΠ΄ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ²ΠΎΠΉΡΡΠ²Π΅ destroyMethod ΠΎΠΏΡΠ΅Π΄Π΅Π»Π½ΠΈΡ Π±ΠΈΠ½Π° (ΠΈΠ»ΠΈ Π² Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΌ default-destroy-method);
3. ΠΠ΅ΡΠΎΠ΄ destroy() ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° DisposableBean.
ΠΠ΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΡΡΠ°ΡΡ ΠΆΠΈΠ·Π½Π΅Π½Π½ΡΠΉ ΡΠΈΠΊΠ» ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ Π±ΠΈΠ½Π° Ρ ΠΆΠΈΠ·Π½Π΅Π½Π½ΡΠΌ ΡΠΈΠΊΠ»ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΠΈ ΡΡΠ°ΠΏΠ°ΠΌΠΈ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ ΡΠ°Π±ΡΠΈΠΊ Π±ΠΈΠ½ΠΎΠ². Π Π½ΠΈΡ ΠΌΡ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ Π² Π±ΡΠ΄ΡΡΠΈΡ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡΡ .
π43β€βπ₯1β€1
Π§ΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π°?
Anonymous Quiz
8%
ΠΡΠ²ΠΎΠ΄ Π² ΠΊΠΎΠ½ΡΠΎΠ»Ρ - 643;
30%
ΠΡΡΡΠΎΠΉ Π²ΡΠ²ΠΎΠ΄ Π² ΠΊΠΎΠ½ΡΠΎΠ»Ρ;
30%
ΠΡΠ²ΠΎΠ΄ Π² ΠΊΠΎΠ½ΡΠΎΠ»Ρ - 6;
32%
ΠΡΠΈΠ±ΠΊΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ.
π15β€1
ΠΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ JavaEE ΡΠ΅ΡΠ²Π»Π΅Ρ Π² Spring Framework?
Web-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Spring MVC ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ ΡΠ°ΠΌΠΎ ΠΏΠΎ ΡΠ΅Π±Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π° ΡΠ΅ΡΠ²Π»Π΅ΡΠ°Ρ : Π²ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π±Π΅ΡΠ΅Ρ Π½Π° ΡΠ΅Π±Ρ Π΅Π΄ΠΈΠ½ΡΠΉ DispatcherServlet. Π‘ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ ΠΏΠ°ΡΡΠ΅ΡΠ½ Front Controller.
ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΉ ΠΎΡ Spring-ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΡΠ΅ΡΠ²Π»Π΅Ρ ΠΈΠ»ΠΈ ΡΠΈΠ»ΡΡΡ, Π½ΠΈΡΠ΅Π³ΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΠ³ΠΎ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π΄Π΅Π»Π°ΡΡ Π½Π΅ Π½ΡΠΆΠ½ΠΎ. ΠΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΠΎ Π² Servlet API, Π½ΡΠΆΠ½ΠΎ ΠΎΠ±ΡΡΠ²ΠΈΡΡ ΠΊΠ»Π°ΡΡ, Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΅Π³ΠΎ Π² web.xml ΠΊΠ°ΠΊ ΡΠ΅ΡΠ²Π»Π΅Ρ, Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΄Π»Ρ ΡΠ΅ΡΠ²Π»Π΅ΡΠ° ΠΌΠ°ΠΏΠΏΠΈΠ½Π³.
Π‘Π΅ΡΠ²Π»Π΅Ρ ΠΆΠΈΠ²Π΅Ρ Π²Π½Π΅ Spring-ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°, Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ Π² Π½ΡΠΌ ΠΏΡΠΎΡΡΠΎ ΡΠ°ΠΊ Π½Π΅ Π·Π°ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. Π§ΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ autowiring, Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅ΡΠ²Π»Π΅ΡΠ° Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ SpringBeanAutowiringSupport.processInjectionBasedOnServletContext, Ρ ΡΠ΅ΠΊΡΡΠΈΠΌ ΡΠ΅ΡΠ²Π»Π΅ΡΠΎΠΌ ΠΈ Π΅Π³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠΌ Π² Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°Ρ . Π ΡΡΠΎΠΌ ΠΆΠ΅ ΡΡΠΈΠ»ΠΈΡΠ°ΡΠ½ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ Π΅ΡΡΡ ΡΡΠ΄ Π΄ΡΡΠ³ΠΈΡ ΡΡΠ΅Π΄ΡΡΠ² Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠΌ ΠΈΠ·Π²Π½Π΅.
ΠΡΠ»ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΠΎΡΡΡΠΎΠ΅Π½Π° Π½Π° Spring Boot, ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π±ΠΈΠ½Π° ΡΠΈΠΏΠ° ServletRegistrationBean ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ΅ΡΠ²Π»Π΅ΡΡ Π² ΡΠ°Π½ΡΠ°ΠΉΠΌΠ΅. Π Π΄Π»Ρ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, ΠΊ ΠΊΠ»Π°ΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ @ServletComponentScan. Π‘ ΡΡΠΎΠΉ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠ΅ΠΉ ΡΡΠ°ΡΡΠ΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΡΠΎΡΠΊΠ°Π½ΠΈΡΡΠ΅Ρ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π²ΡΠ΅ web-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π² ΡΡΠΈΠ»Π΅ Servlet 3.0: ΠΊΠ»Π°ΡΡΡ Ρ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡΠΌΠΈ @WebFilter, @WebListener ΠΈ @WebServlet.
Web-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Spring MVC ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ ΡΠ°ΠΌΠΎ ΠΏΠΎ ΡΠ΅Π±Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π° ΡΠ΅ΡΠ²Π»Π΅ΡΠ°Ρ : Π²ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π±Π΅ΡΠ΅Ρ Π½Π° ΡΠ΅Π±Ρ Π΅Π΄ΠΈΠ½ΡΠΉ DispatcherServlet. Π‘ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ ΠΏΠ°ΡΡΠ΅ΡΠ½ Front Controller.
ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΉ ΠΎΡ Spring-ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΡΠ΅ΡΠ²Π»Π΅Ρ ΠΈΠ»ΠΈ ΡΠΈΠ»ΡΡΡ, Π½ΠΈΡΠ΅Π³ΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΠ³ΠΎ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π΄Π΅Π»Π°ΡΡ Π½Π΅ Π½ΡΠΆΠ½ΠΎ. ΠΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΠΎ Π² Servlet API, Π½ΡΠΆΠ½ΠΎ ΠΎΠ±ΡΡΠ²ΠΈΡΡ ΠΊΠ»Π°ΡΡ, Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΅Π³ΠΎ Π² web.xml ΠΊΠ°ΠΊ ΡΠ΅ΡΠ²Π»Π΅Ρ, Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΄Π»Ρ ΡΠ΅ΡΠ²Π»Π΅ΡΠ° ΠΌΠ°ΠΏΠΏΠΈΠ½Π³.
Π‘Π΅ΡΠ²Π»Π΅Ρ ΠΆΠΈΠ²Π΅Ρ Π²Π½Π΅ Spring-ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°, Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ Π² Π½ΡΠΌ ΠΏΡΠΎΡΡΠΎ ΡΠ°ΠΊ Π½Π΅ Π·Π°ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. Π§ΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ autowiring, Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅ΡΠ²Π»Π΅ΡΠ° Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ SpringBeanAutowiringSupport.processInjectionBasedOnServletContext, Ρ ΡΠ΅ΠΊΡΡΠΈΠΌ ΡΠ΅ΡΠ²Π»Π΅ΡΠΎΠΌ ΠΈ Π΅Π³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠΌ Π² Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°Ρ . Π ΡΡΠΎΠΌ ΠΆΠ΅ ΡΡΠΈΠ»ΠΈΡΠ°ΡΠ½ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ Π΅ΡΡΡ ΡΡΠ΄ Π΄ΡΡΠ³ΠΈΡ ΡΡΠ΅Π΄ΡΡΠ² Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠΌ ΠΈΠ·Π²Π½Π΅.
ΠΡΠ»ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΠΎΡΡΡΠΎΠ΅Π½Π° Π½Π° Spring Boot, ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π±ΠΈΠ½Π° ΡΠΈΠΏΠ° ServletRegistrationBean ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ΅ΡΠ²Π»Π΅ΡΡ Π² ΡΠ°Π½ΡΠ°ΠΉΠΌΠ΅. Π Π΄Π»Ρ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, ΠΊ ΠΊΠ»Π°ΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ @ServletComponentScan. Π‘ ΡΡΠΎΠΉ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠ΅ΠΉ ΡΡΠ°ΡΡΠ΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΡΠΎΡΠΊΠ°Π½ΠΈΡΡΠ΅Ρ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π²ΡΠ΅ web-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π² ΡΡΠΈΠ»Π΅ Servlet 3.0: ΠΊΠ»Π°ΡΡΡ Ρ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡΠΌΠΈ @WebFilter, @WebListener ΠΈ @WebServlet.
π22
Π§ΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π°?
Anonymous Quiz
31%
ΠΡΠ²ΠΎΠ΄ Π² ΠΊΠΎΠ½ΡΠΎΠ»Ρ - "-1";
29%
ΠΡΠ²ΠΎΠ΄ Π² ΠΊΠΎΠ½ΡΠΎΠ»Ρ - "1";
10%
ΠΡΠΈΠ±ΠΊΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ;
25%
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π΅ Π·Π°Π²Π΅ΡΡΠΈΡ ΡΠ²ΠΎΠ΅Π³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. Π ΠΊΠΎΠ½ΡΠΎΠ»Ρ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡΡ;
5%
ΠΡΠ²ΠΎΠ΄ Π² ΠΊΠΎΠ½ΡΠΎΠ»Ρ - "0".
π14π4
Π ΡΡΠΌ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΈ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ Spring Boot?
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΡΡΠ½ΠΎΡΡΠΈ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ° Spring Boot β ΡΡΠΎ ΡΡΠ°ΡΡΠ΅ΡΡ. ΠΠ°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Ρ Π½Π°Π·Π²Π°Π½ΠΈΡΠΌΠΈ Π²ΠΈΠ΄Π° spring-boot-starter-xxx Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π΄Π²Π΅ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ Π·Π°Π΄Π°ΡΠΈ. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΠΎΠ½ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π½Π°Π±ΠΎΡ ΡΠΈΠΏΠΈΡΠ½ΡΡ ΡΡΠΎΡΠΎΠ½Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ-Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ; Π²ΠΎ-Π²ΡΠΎΡΡΡ , ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΡΡ ΡΠΈΠΏΠΈΡΠ½ΡΠ΅ Π±ΠΈΠ½Ρ ΠΈ ΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΠΎ Spring Boot Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ΄ ΡΠ°ΠΊΠΈΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΡΡΠ΅ΠΉ, ΠΊΠ°ΠΊ embedded-ΡΠ΅ΡΠ²Π΅Ρ, ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ web-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π±Π΅Π· web.xml, ΠΌΠ΅ΡΡΠΈΠΊΠΈ, properties Π²ΡΠ½Π΅ΡΠ΅Π½Π½ΡΠ΅ ΠΈΠ· ΠΊΠΎΠ΄Π° Π²ΠΎ Π²Π½Π΅ΡΠ½ΠΈΠ΅ ΡΠ°ΠΉΠ»Ρ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, spring-boot-starter-data-jpa Π΄Π°ΡΡ Π²Π°ΠΌ Π³ΠΎΡΠΎΠ²ΡΠΉ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ Π²ΡΠ΅Π³ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ JPA: Π΄ΡΠ°ΠΉΠ²Π΅Ρ, ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΡ Ρ Π½ΠΈΠΌ Π²Π΅ΡΡΠΈΡ Hibernate, Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Persistence API ΠΈ Spring Data. Π ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠΎΡΠ²ΡΡΡΡ Π²ΡΠ΅ Π½ΡΠΆΠ½ΡΠ΅ Π΄Π»Ρ JPA ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅Π² Π±ΠΈΠ½Ρ.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Spring Boot ΡΡΠΊΠΎΡΡΠ΅Ρ ΠΈ ΡΠΏΡΠΎΡΠ°Π΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ, Π΄Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΠ·Π±Π°Π²ΠΈΡΡΡΡ ΠΎΡ boilerplate-ΠΊΠΎΠ΄Π° Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΠΈ ΡΡΠΎΠΊΡΡΠΈΡΠΎΠ²Π°ΡΡΡΡ Π½Π° Π±ΠΈΠ·Π½Π΅Ρ-Π·Π°Π΄Π°ΡΠ°Ρ . ΠΡΠΎ Π±ΡΠ²Π°Π΅Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π²Π°ΠΆΠ½ΠΎ Π² ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ΅, ΠΊΠΎΠ³Π΄Π° ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΡΠ°ΠΊΠ°Ρ ΠΈΠ·Π±ΡΡΠΎΡΠ½ΠΎΡΡΡ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π±ΠΎΠ»ΡΡΠ΅ΠΉ ΡΡΠΆΠ΅Π»ΠΎΠ²Π΅ΡΠ½ΠΎΡΡΠΈ ΠΈ ΠΌΠ΅Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΡΡΠ½ΠΎΡΡΠΈ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ° Spring Boot β ΡΡΠΎ ΡΡΠ°ΡΡΠ΅ΡΡ. ΠΠ°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Ρ Π½Π°Π·Π²Π°Π½ΠΈΡΠΌΠΈ Π²ΠΈΠ΄Π° spring-boot-starter-xxx Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π΄Π²Π΅ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ Π·Π°Π΄Π°ΡΠΈ. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΠΎΠ½ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π½Π°Π±ΠΎΡ ΡΠΈΠΏΠΈΡΠ½ΡΡ ΡΡΠΎΡΠΎΠ½Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ-Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ; Π²ΠΎ-Π²ΡΠΎΡΡΡ , ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΡΡ ΡΠΈΠΏΠΈΡΠ½ΡΠ΅ Π±ΠΈΠ½Ρ ΠΈ ΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΠΎ Spring Boot Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ΄ ΡΠ°ΠΊΠΈΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΡΡΠ΅ΠΉ, ΠΊΠ°ΠΊ embedded-ΡΠ΅ΡΠ²Π΅Ρ, ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ web-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π±Π΅Π· web.xml, ΠΌΠ΅ΡΡΠΈΠΊΠΈ, properties Π²ΡΠ½Π΅ΡΠ΅Π½Π½ΡΠ΅ ΠΈΠ· ΠΊΠΎΠ΄Π° Π²ΠΎ Π²Π½Π΅ΡΠ½ΠΈΠ΅ ΡΠ°ΠΉΠ»Ρ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, spring-boot-starter-data-jpa Π΄Π°ΡΡ Π²Π°ΠΌ Π³ΠΎΡΠΎΠ²ΡΠΉ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ Π²ΡΠ΅Π³ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ JPA: Π΄ΡΠ°ΠΉΠ²Π΅Ρ, ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΡ Ρ Π½ΠΈΠΌ Π²Π΅ΡΡΠΈΡ Hibernate, Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Persistence API ΠΈ Spring Data. Π ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠΎΡΠ²ΡΡΡΡ Π²ΡΠ΅ Π½ΡΠΆΠ½ΡΠ΅ Π΄Π»Ρ JPA ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅Π² Π±ΠΈΠ½Ρ.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Spring Boot ΡΡΠΊΠΎΡΡΠ΅Ρ ΠΈ ΡΠΏΡΠΎΡΠ°Π΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ, Π΄Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΠ·Π±Π°Π²ΠΈΡΡΡΡ ΠΎΡ boilerplate-ΠΊΠΎΠ΄Π° Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΠΈ ΡΡΠΎΠΊΡΡΠΈΡΠΎΠ²Π°ΡΡΡΡ Π½Π° Π±ΠΈΠ·Π½Π΅Ρ-Π·Π°Π΄Π°ΡΠ°Ρ . ΠΡΠΎ Π±ΡΠ²Π°Π΅Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π²Π°ΠΆΠ½ΠΎ Π² ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ΅, ΠΊΠΎΠ³Π΄Π° ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΡΠ°ΠΊΠ°Ρ ΠΈΠ·Π±ΡΡΠΎΡΠ½ΠΎΡΡΡ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π±ΠΎΠ»ΡΡΠ΅ΠΉ ΡΡΠΆΠ΅Π»ΠΎΠ²Π΅ΡΠ½ΠΎΡΡΠΈ ΠΈ ΠΌΠ΅Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
π29β€3
Π§ΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π°?
Anonymous Quiz
47%
ΠΡΠ²ΠΎΠ΄ Π² ΠΊΠΎΠ½ΡΠΎΠ»Ρ - "[[[0, 0, 0], [0, 0, 0]]]"
2%
ΠΡΠ²ΠΎΠ΄ Π² ΠΊΠΎΠ½ΡΠΎΠ»Ρ - "[[0, 0], [0, 0]]"
6%
ΠΡΠ²ΠΎΠ΄ Π² ΠΊΠΎΠ½ΡΠΎΠ»Ρ - "[[[1, 2, 3], [1, 2, 3]]]"
22%
ΠΡΠ²ΠΎΠ΄ Π² ΠΊΠΎΠ½ΡΠΎΠ»Ρ - "[1, 2, 3]"
23%
ΠΡΠΈΠ±ΠΊΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ
π23π2π1
ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΈΠ½ΡΠ΅ΠΊΡΠΈΡ ΠΏΡΠΎΡΠΎΡΠΈΠΏΠ° Π² ΡΠΈΠ½Π³Π»ΡΠΎΠ½?
Π Π°Π½ΡΡΠ΅ ΠΌΡ ΡΠΆΠ΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π»ΠΈ ΡΠ°Π·Π»ΠΈΡΠΈΡ ΡΠΊΠΎΡΠΏΠΎΠ² singleton ΠΈ prototype Π² Spring Framework. ΠΠΎΠΏΡΡΡΠΈΠΌ ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΊΠΎΠ³Π΄Π° Π² singleton-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π²Π½Π΅Π΄ΡΡΠ΅ΡΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΡΠΎ ΡΠΊΠΎΡΠΏΠΎΠΌ prototype β ΠΊΠΎΠ³Π΄Π° Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ?
ΠΡΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π±ΠΈΠ½Π° Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ @Scope(SCOPE_PROTOTYPE), ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎΡ Π±ΠΈΠ½ Π² ΡΠΈΠ½Π³Π»ΡΠΎΠ½Π΅ ΡΠ΅ΡΠ΅Π· Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ @Autowired β Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡΠ΅ΠΊΡ. ΠΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠΈΠ½Π³Π»ΡΠΎΠ½ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ, ΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΠΏΡΠΎΡΠΎΡΠΈΠΏΡ ΡΠ»ΡΡΠΈΡΡΡ ΡΠΎΠΆΠ΅ ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ ΠΏΡΠΈ Π΅Π³ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ (ΠΏΡΠΈ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ).
ΠΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ β ΠΎΡΠΊΠ°Π·Π°ΡΡΡΡ ΠΎΡ @Autowired, ΠΈ Π΄ΠΎΡΡΠ°Π²Π°ΡΡ Π΅Π³ΠΎ ΠΈΠ· ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π²ΡΡΡΠ½ΡΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½ΡΠΆΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ context.getBean(MyPrototype.class).
ΠΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ΠΌ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅ΡΠ΅Π· Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° (ΠΏΠ°ΡΡΠ΅ΡΠ½ Β«ΠΠΎΠΌΠ°Π½Π΄Π°Β»). ΠΠ²ΡΠΎΠ²Π°ΠΉΡΠΈΡΡΡ Π½Π΅ ΡΠ°ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ, Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠΈΠΉ Π΅Π³ΠΎ ΠΌΠ΅ΡΠΎΠ΄.
ΠΠΎΠ»Π΅Π΅ ΠΊΡΠ°ΡΠΈΠ²ΡΠΉ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± β ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π±ΠΈΠ½Π°. Π Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ @Scope ΠΊΡΠΎΠΌΠ΅ ΡΠ°ΠΌΠΎΠ³ΠΎ scopeName Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π²ΡΠΎΡΠΎΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ β proxyMode. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ NO β ΠΏΡΠΎΠΊΡΠΈ Π½Π΅ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ. ΠΠΎ Π΅ΡΠ»ΠΈ ΡΠΊΠ°Π·Π°ΡΡ INTERFACES ΠΈΠ»ΠΈ TARGET_CLASS, ΡΠΎ ΠΏΠΎΠ΄ @Autowired Π±ΡΠ΄Π΅Ρ Π²Π½Π΅Π΄ΡΡΡΡΡΡ Π½Π΅ ΡΠ°ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ, Π° ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠΌ ΠΏΡΠΎΠΊΡΠΈ. Π ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΎΠΊΡΠΈΡΡΠ΅ΠΌΡΠΉ Π±ΠΈΠ½ ΠΈΠΌΠ΅Π΅Ρ ΡΠΊΠΎΡΠΏ prototype, ΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ Π²Π½ΡΡΡΠΈ ΠΏΡΠΎΠΊΡΠΈ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅ΡΠΎΠ·Π΄Π°Π²Π°ΡΡΡΡ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ.
ΠΡΡΡΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ ΡΠΎ ΡΠΊΠΎΡΠΏΠ°ΠΌΠΈ β ΠΏΡΠΎΡΠΈΡΠ°ΡΡ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΠΉ Π³Π°ΠΉΠ΄ Ρ ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΡΠΌΠΈ, ΠΈ ΠΏΠΎΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅. ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΠΏΡΠΈΠΌΠ΅Ρ Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π²ΡΡΠ΅.
Π Π°Π½ΡΡΠ΅ ΠΌΡ ΡΠΆΠ΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π»ΠΈ ΡΠ°Π·Π»ΠΈΡΠΈΡ ΡΠΊΠΎΡΠΏΠΎΠ² singleton ΠΈ prototype Π² Spring Framework. ΠΠΎΠΏΡΡΡΠΈΠΌ ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΊΠΎΠ³Π΄Π° Π² singleton-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π²Π½Π΅Π΄ΡΡΠ΅ΡΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΡΠΎ ΡΠΊΠΎΡΠΏΠΎΠΌ prototype β ΠΊΠΎΠ³Π΄Π° Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ?
ΠΡΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π±ΠΈΠ½Π° Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ @Scope(SCOPE_PROTOTYPE), ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎΡ Π±ΠΈΠ½ Π² ΡΠΈΠ½Π³Π»ΡΠΎΠ½Π΅ ΡΠ΅ΡΠ΅Π· Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ @Autowired β Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡΠ΅ΠΊΡ. ΠΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠΈΠ½Π³Π»ΡΠΎΠ½ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ, ΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΠΏΡΠΎΡΠΎΡΠΈΠΏΡ ΡΠ»ΡΡΠΈΡΡΡ ΡΠΎΠΆΠ΅ ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ ΠΏΡΠΈ Π΅Π³ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ (ΠΏΡΠΈ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ).
ΠΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ β ΠΎΡΠΊΠ°Π·Π°ΡΡΡΡ ΠΎΡ @Autowired, ΠΈ Π΄ΠΎΡΡΠ°Π²Π°ΡΡ Π΅Π³ΠΎ ΠΈΠ· ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π²ΡΡΡΠ½ΡΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½ΡΠΆΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ context.getBean(MyPrototype.class).
ΠΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ΠΌ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅ΡΠ΅Π· Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° (ΠΏΠ°ΡΡΠ΅ΡΠ½ Β«ΠΠΎΠΌΠ°Π½Π΄Π°Β»). ΠΠ²ΡΠΎΠ²Π°ΠΉΡΠΈΡΡΡ Π½Π΅ ΡΠ°ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ, Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠΈΠΉ Π΅Π³ΠΎ ΠΌΠ΅ΡΠΎΠ΄.
ΠΠΎΠ»Π΅Π΅ ΠΊΡΠ°ΡΠΈΠ²ΡΠΉ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± β ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π±ΠΈΠ½Π°. Π Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ @Scope ΠΊΡΠΎΠΌΠ΅ ΡΠ°ΠΌΠΎΠ³ΠΎ scopeName Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π²ΡΠΎΡΠΎΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ β proxyMode. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ NO β ΠΏΡΠΎΠΊΡΠΈ Π½Π΅ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ. ΠΠΎ Π΅ΡΠ»ΠΈ ΡΠΊΠ°Π·Π°ΡΡ INTERFACES ΠΈΠ»ΠΈ TARGET_CLASS, ΡΠΎ ΠΏΠΎΠ΄ @Autowired Π±ΡΠ΄Π΅Ρ Π²Π½Π΅Π΄ΡΡΡΡΡΡ Π½Π΅ ΡΠ°ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ, Π° ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠΌ ΠΏΡΠΎΠΊΡΠΈ. Π ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΎΠΊΡΠΈΡΡΠ΅ΠΌΡΠΉ Π±ΠΈΠ½ ΠΈΠΌΠ΅Π΅Ρ ΡΠΊΠΎΡΠΏ prototype, ΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ Π²Π½ΡΡΡΠΈ ΠΏΡΠΎΠΊΡΠΈ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅ΡΠΎΠ·Π΄Π°Π²Π°ΡΡΡΡ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ.
ΠΡΡΡΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ ΡΠΎ ΡΠΊΠΎΡΠΏΠ°ΠΌΠΈ β ΠΏΡΠΎΡΠΈΡΠ°ΡΡ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΠΉ Π³Π°ΠΉΠ΄ Ρ ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΡΠΌΠΈ, ΠΈ ΠΏΠΎΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅. ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΠΏΡΠΈΠΌΠ΅Ρ Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π²ΡΡΠ΅.
π27β€2
Π§Π΅ΠΌ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ final finally finalize?
Π’Π΅ΠΌ, ΡΡΠΎ ΡΡΠΎ Π΄Π°ΠΆΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ°Π·Π½ΡΠ΅ Π²Π΅ΡΠΈ. ΠΠ°ΠΊ ΠΈ Π²ΠΎΠΏΡΠΎΡ ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°Ρ Object, ΡΡΠΎ ΡΠΏΠΎΡΠΎΠ± Π½Π°ΡΠ°ΡΡ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡ.
finalize β ΠΌΠ΅ΡΠΎΠ΄-ΡΠΈΠ½Π°Π»ΠΈΠ·Π°ΡΠΎΡ ΠΈΠ· Object.
final β ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ, ΠΏΠΎΠ»ΡΠΌ, ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ ΠΈ ΠΊΠ»Π°ΡΡΠ°ΠΌ. ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π΅ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΌ ΠΈ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ. Π€ΠΈΠ½Π°Π»ΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π½Π΅Π»ΡΠ·Ρ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π² Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠ°Ρ . Π€ΠΈΠ½Π°Π»ΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠΎΠ² Π²ΠΎΠΎΠ±ΡΠ΅. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Ρ ΠΎΡΠΎΡΠ΅Π³ΠΎ API ΠΏΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠΈΡ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ.
ΠΠΎΠ³Π΄Π° Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π²Π½Π΅ΡΠ½Π΅ΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ, ΠΎΠ½Π° ΠΎΠ±ΡΠ·Π°Π½Π° Π±ΡΡΡ effectively final. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ final Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ, Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²ΡΡ ΡΠ°Π²Π½ΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡΡΡΡ.
finally β ΡΠ°ΡΡΡ ΡΠ·ΡΠΊΠΎΠ²ΠΎΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ try-catch-finally.
ΠΡΠ±ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, Π²ΡΠ±ΡΠΎΡΠ΅Π½Π½ΠΎΠ΅ ΠΈΠ· Π±Π»ΠΎΠΊΠ° try ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π² ΡΠ°ΠΌΡΠΉ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ Π΅ΠΌΡ catch (ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ). ΠΡΠΈΠΌ ΠΏΡΠΎΠ΄ΠΈΠΊΡΠΎΠ²Π°Π½Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡ Π±Π»ΠΎΠΊΠΈ catch Π² ΡΡΡΠΎΠ³ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅, ΠΎΡ ΡΠΈΠΏΠ° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ-Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠ°, ΠΊ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ. Π ΡΠ»ΡΡΠ°Π΅ multicatch ΡΠΎΡ ΠΆΠ΅ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ±Π»ΡΠ΄Π°ΡΡΡΡ ΠΈ Π²Π½ΡΡΡΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ catch. ΠΠΎΠ»ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² ΠΏΡΠΎ ΠΏΠΎΡΡΠ΄ΠΎΠΊ.
ΠΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡΡ Π±Π»ΠΎΠΊ finally. ΠΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΎΠ½ Π² Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π±ΡΠ»ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π½Π΅Ρ. Π’ΠΈΠΏΠΈΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ β ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠΎΠ², ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ Π·Π°Π²Π΅ΡΡΠ°ΡΡΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ.
ΠΠ»Ρ ΡΡΠ΅Π±ΡΡΡΠΈΡ ΡΠΈΠ½Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠ»Π°ΡΡΠΎΠ² (Β«ΡΠ΅ΡΡΡΡΠΎΠ²Β») Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ AutoCloseable, ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠΈΠΉΡΡ ΠΊΠΎΠ΄ Π±Π»ΠΎΠΊΠ° final Π²ΡΠ½ΠΎΡΠΈΡΡΡ Π² ΠΌΠ΅ΡΠΎΠ΄ close ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π½Π΅ΡΠ²Π½ΠΎ Π² ΠΊΠΎΠ½ΡΠ΅ try-with-resources. ΠΡΠ»ΠΈ Π² ΡΡΠΎΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ ΠΈ ΡΠ²Π½ΡΠΉ final, ΠΎΠ½ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ ΠΏΠΎΡΠ»Π΅.
Π’Π΅ΠΌ, ΡΡΠΎ ΡΡΠΎ Π΄Π°ΠΆΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ°Π·Π½ΡΠ΅ Π²Π΅ΡΠΈ. ΠΠ°ΠΊ ΠΈ Π²ΠΎΠΏΡΠΎΡ ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°Ρ Object, ΡΡΠΎ ΡΠΏΠΎΡΠΎΠ± Π½Π°ΡΠ°ΡΡ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡ.
finalize β ΠΌΠ΅ΡΠΎΠ΄-ΡΠΈΠ½Π°Π»ΠΈΠ·Π°ΡΠΎΡ ΠΈΠ· Object.
final β ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ, ΠΏΠΎΠ»ΡΠΌ, ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ ΠΈ ΠΊΠ»Π°ΡΡΠ°ΠΌ. ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π΅ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΌ ΠΈ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ. Π€ΠΈΠ½Π°Π»ΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π½Π΅Π»ΡΠ·Ρ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π² Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠ°Ρ . Π€ΠΈΠ½Π°Π»ΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠΎΠ² Π²ΠΎΠΎΠ±ΡΠ΅. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Ρ ΠΎΡΠΎΡΠ΅Π³ΠΎ API ΠΏΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠΈΡ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ.
ΠΠΎΠ³Π΄Π° Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π²Π½Π΅ΡΠ½Π΅ΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ, ΠΎΠ½Π° ΠΎΠ±ΡΠ·Π°Π½Π° Π±ΡΡΡ effectively final. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ final Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ, Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²ΡΡ ΡΠ°Π²Π½ΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡΡΡΡ.
finally β ΡΠ°ΡΡΡ ΡΠ·ΡΠΊΠΎΠ²ΠΎΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ try-catch-finally.
ΠΡΠ±ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, Π²ΡΠ±ΡΠΎΡΠ΅Π½Π½ΠΎΠ΅ ΠΈΠ· Π±Π»ΠΎΠΊΠ° try ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π² ΡΠ°ΠΌΡΠΉ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ Π΅ΠΌΡ catch (ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ). ΠΡΠΈΠΌ ΠΏΡΠΎΠ΄ΠΈΠΊΡΠΎΠ²Π°Π½Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡ Π±Π»ΠΎΠΊΠΈ catch Π² ΡΡΡΠΎΠ³ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅, ΠΎΡ ΡΠΈΠΏΠ° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ-Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠ°, ΠΊ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ. Π ΡΠ»ΡΡΠ°Π΅ multicatch ΡΠΎΡ ΠΆΠ΅ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ±Π»ΡΠ΄Π°ΡΡΡΡ ΠΈ Π²Π½ΡΡΡΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ catch. ΠΠΎΠ»ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² ΠΏΡΠΎ ΠΏΠΎΡΡΠ΄ΠΎΠΊ.
ΠΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡΡ Π±Π»ΠΎΠΊ finally. ΠΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΎΠ½ Π² Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π±ΡΠ»ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π½Π΅Ρ. Π’ΠΈΠΏΠΈΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ β ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠΎΠ², ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ Π·Π°Π²Π΅ΡΡΠ°ΡΡΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ.
ΠΠ»Ρ ΡΡΠ΅Π±ΡΡΡΠΈΡ ΡΠΈΠ½Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠ»Π°ΡΡΠΎΠ² (Β«ΡΠ΅ΡΡΡΡΠΎΠ²Β») Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ AutoCloseable, ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠΈΠΉΡΡ ΠΊΠΎΠ΄ Π±Π»ΠΎΠΊΠ° final Π²ΡΠ½ΠΎΡΠΈΡΡΡ Π² ΠΌΠ΅ΡΠΎΠ΄ close ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π½Π΅ΡΠ²Π½ΠΎ Π² ΠΊΠΎΠ½ΡΠ΅ try-with-resources. ΠΡΠ»ΠΈ Π² ΡΡΠΎΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ ΠΈ ΡΠ²Π½ΡΠΉ final, ΠΎΠ½ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ ΠΏΠΎΡΠ»Π΅.
π29