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

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

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

ΠœΡ‹ Π½Π° Π±ΠΈΡ€ΠΆΠ΅: telega.in/channels/javatasks/card?r=lcDuijdm
Download Telegram
πŸ‘5
Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Spring Data

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

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

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

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

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

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

Π’ 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.
πŸ‘30πŸ”₯3❀1
Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ компиляции ΠΈ выполнСния ΠΊΠΎΠ΄Π°?
πŸ‘13
Как Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ· Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ класса?

Π’ 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.

НС слСдуСт ΠΏΡƒΡ‚Π°Ρ‚ΡŒ ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π±ΠΈΠ½Π° с ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ контСкста ΠΈ этапами ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ Ρ„Π°Π±Ρ€ΠΈΠΊ Π±ΠΈΠ½ΠΎΠ². О Π½ΠΈΡ… ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π² Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ… публикациях.
πŸ‘43❀‍πŸ”₯1❀1
Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ компиляции ΠΈ выполнСния ΠΊΠΎΠ΄Π°?
πŸ‘11🌭3
Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ компиляции ΠΈ выполнСния ΠΊΠΎΠ΄Π°?
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.
πŸ‘22
Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ компиляции ΠΈ выполнСния ΠΊΠΎΠ΄Π°?
πŸ‘9😱2
Π’ Ρ‡Ρ‘ΠΌ прСимущСства ΠΈ нСдостатки 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-ΠΊΠΎΠ΄Π° Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΈ ΡΡ„ΠΎΠΊΡƒΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° бизнСс-Π·Π°Π΄Π°Ρ‡Π°Ρ…. Π­Ρ‚ΠΎ Π±Ρ‹Π²Π°Π΅Ρ‚ особСнно Π²Π°ΠΆΠ½ΠΎ Π² микросСрвисной Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅, ΠΊΠΎΠ³Π΄Π° создаСтся большоС количСство ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, такая ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ СстСствСнно ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ большСй тяТСловСсности ΠΈ ΠΌΠ΅Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ прилоТСния.
πŸ‘29❀3
Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ компиляции ΠΈ выполнСния ΠΊΠΎΠ΄Π°?
πŸ‘13
Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈΠ½ΡŠΠ΅ΠΊΡ†ΠΈΡ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ° Π² синглтон?

РаньшС ΠΌΡ‹ ΡƒΠΆΠ΅ рассматривали различия скоупов 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, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ послС.
πŸ‘29