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

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

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

ΠœΡ‹ Π½Π° Π±ΠΈΡ€ΠΆΠ΅: telega.in/channels/javatasks/card?r=lcDuijdm
Download Telegram
ΠžΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» 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
Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ компиляции ΠΈ выполнСния ΠΊΠΎΠ΄Π°?
🀯35πŸ‘10
Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ компиляции ΠΈ выполнСния ΠΊΠΎΠ΄Π°?
Anonymous Quiz
15%
Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡƒΠ³Π°Π΄Π°Ρ‚ΡŒ;
39%
Π’Ρ‹Π²ΠΎΠ΄ Π² консоль - "0123456789";
31%
Ошибка - SyntaxError;
15%
Π’Ρ‹Π²ΠΎΠ΄ Π² консоль - "0"
πŸ‘15🍌3πŸ”₯2❀‍πŸ”₯1
КакиС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹?

Π›ΠΈΡ‚Π΅Ρ€Π°Π» – ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ символов, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰Π°Ρ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° (ΠΈΠ»ΠΈ строки).

πŸ”˜ ЦСлочислСнныС (Integer). Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹: 2019, 1__000_000 (с Java 7), 10048L (ΠΌΠΎΠΆΠ½ΠΎ l, Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡƒΡ‚Π°Ρ‚ΡŒΡΡ с 1), 0xfd12aa, 0b1011101, 07654321.

πŸ”˜ Π‘ ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ (floating-point). Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹: 123.4, 56.7e8, .07, 42F, 1.4D (ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎ, ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈ Ρ‚Π°ΠΊ double).

πŸ”˜ Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹ ΠΈ строки. Π‘ΠΈΠΌΠ²ΠΎΠ» (char) – Π² ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°Ρ…: 'R'. БпСцсимволы ΠΏΠΈΡˆΡƒΡ‚ΡΡ с бэкслСшСм: '\n'. Π›ΡŽΠ±ΠΎΠΉ символ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ escape-ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ: '\u00F1'. Π‘Ρ‚Ρ€ΠΎΠΊΠΎΠ²Ρ‹ΠΉ Π»ΠΈΡ‚Π΅Ρ€Π°Π» – ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ символов Π² Π΄Π²ΠΎΠΉΠ½Ρ‹Ρ… ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°Ρ…: "Blabla". Для символов строки Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚Π΅ ΠΆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°.

πŸ”˜ ЛогичСскиС (boolean). true ΠΈ false.

πŸ”˜ Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π»ΠΈΡ‚Π΅Ρ€Π°Π» null.

ВсС Π½ΡŽΠ°Π½ΡΡ‹ описаны Π²
ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.
πŸ‘18❀1
Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ компиляции ΠΈ выполнСния ΠΊΠΎΠ΄Π°?
πŸ‘8❀1
πŸ‘18β˜ƒ1
Π§Π΅ΠΌ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ checked ΠΈ unchecked ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ?

Вопрос Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‚ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ, ΡΡƒΡ‚ΡŒ вопроса – объяснСниС ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ классов ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ описано Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π±Ρ‹Π²Π°ΡŽΡ‚ checked ΠΈ unchecked. Checked трСбуСтся ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π² сигнатурС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ throws; ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π² throws Π² Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅. Unchecked ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ, Π½ΠΎ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄Π°ΠΆΠ΅ Ссли ΡƒΠΊΠ°Π·Π°Π½Π° Π² throws.

πŸ”˜ Throwable – Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс для всСго Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использовано с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ throw ΠΈ Π² конструкции try-catch
πŸ”˜ RuntimeException – Β«Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅Β» unchecked-ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ
πŸ”˜ Error – unchecked ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ Β«ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹Β» прилоТСния. НС Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ (хотя тСхничСски ΠΌΠΎΠΆΠ½ΠΎ). ВСорСтичСски JVM ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² Π½Π΅Π²Π°Π»ΠΈΠ΄Π½ΠΎΠΌ состоянии ΠΈ Π½Π΅ Π΄Π°Π²Π°Ρ‚ΡŒ большС Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΉ
πŸ”˜ Exception (ΠΊΡ€ΠΎΠΌΠ΅ RuntimeException) – checked ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ
πŸ‘18
Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ компиляции ΠΈ выполнСния ΠΊΠΎΠ΄Π°? ΠŸΡ€ΠΈ условии Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» Π²Π°Π»ΠΈΠ΄Π΅Π½ ΠΈ Π² процСссС выполнСния Π½Π΅ выбросит FileNotFoundException
πŸ‘8πŸ₯±2🌚1
πŸ‘12
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ synchronized?

МоТно ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΈ ΠΊΠ°ΠΊ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ с Π±Π»ΠΎΠΊΠΎΠΌ ΠΊΠΎΠ΄Π°. ВыполняСт ΠΊΠΎΠ΄ ΠΏΡ€ΠΈ Π·Π°Ρ…Π²Π°Ρ‡Π΅Π½Π½ΠΎΠΌ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π’ Π²ΠΈΠ΄Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ указываСтся явно. Π’ Π²ΠΈΠ΄Π΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° нСстатичСского ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ this, статичСского – .class Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ класса.

Один ΠΈΠ· основных инструмСнтов обСспСчСния потокобСзопасности. ΠžΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ выполняСтся Π½Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° synchronized Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈ Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅. Вакая Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° называСтся intrinsic lock ΠΈΠ»ΠΈ monitor lock, ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассматриваСтся Π² Java Concurrency in Practice 2.3.1.

Π‘Π»ΠΎΠΊ synchronized Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ для использования ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² wait, notify, notifyAll.
πŸ‘15
Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ volatile?

volatile
– ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ. НС Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ volatile Π² C++, Π½Π΅ обязано Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ с кэшСм процСссора. ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΏΠΎΠ»Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ€ΠΎΠ²Π½ΠΎ Π΄Π²Π° эффСкта.

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Ρ‡Ρ‚Π΅Π½ΠΈΠ΅/запись Ρ‚Π°ΠΊΠΎΠ³ΠΎ поля становятся Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹ΠΌΠΈ. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для long ΠΈ double, ΠΈ Π½Π΅ Π½Π° всСх ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ…. Для ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠΎΠ»Π΅ΠΉ это Π²Π΅Ρ€Π½ΠΎ ΠΈ Ρ‚Π°ΠΊ.

Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΈ самый интСрСсный эффСкт – ΠΏΠ°Ρ€Π° событий запись-Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ для Ρ‚Π°ΠΊΠΎΠ³ΠΎ поля ΡΠ²Π»ΡΡŽΡ‚ΡΡ synchronization actions. Π—Π½Π°Ρ‡ΠΈΡ‚, ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ сущСствуСт ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ happens-before. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ сущСствуСт гарантия, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π΄ΡˆΠ΅Π΅ Π² памяти Π΄ΠΎ записи Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΈΠ΄Π½ΠΎ послС чтСния. Π’ΠΎ Π΅ΡΡ‚ΡŒ Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Ρ‹ значСния, записанныС Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅.

Для ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ понимания Ρ‚Π΅ΠΌΡ‹ рСкомСндуСтся ΠΊ просмотру Π΄ΠΎΠΊΠ»Π°Π΄
АлСксСя Π¨ΠΈΠΏΠΈΠ»Ρ‘Π²Π° ΠΈ докумСнтация. Π›ΡƒΡ‡ΡˆΠ΅ всСго эффСкт volatile ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π·Π°Π΄Π°Ρ‡Π° ΠΈΠ· этого Π΄ΠΎΠΊΠ»Π°Π΄Π°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ часто ΠΈ Π΄Π°ΡŽΡ‚ Π² качСствС этого вопроса. Вопрос – Ρ‡Ρ‚ΠΎ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄:

int a; int b;

// thread 1:
a = 1;
b = 2;

// thread 2:
System.out.print(b);
System.out.print(a);

Π’Ρ€ΡŽΠΊ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΌΠΈΠΌΠΎ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹Ρ… 21 (ΠΏΠΎΡ‚ΠΎΠΊ 2 ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Π» послС 1), 00 (ΠΏΠΎΡ‚ΠΎΠΊ 2 ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Π» Π΄ΠΎ 1, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π΅Ρ‰Π΅ Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹) ΠΈ 01 (ΠΏΠΎΡ‚ΠΎΠΊ 2 сработал ΠΌΠ΅ΠΆΠ΄Ρƒ записями), ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹Π΅ 20. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ для ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° дСйствуСт program order, ΠΎΠ½ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ хотя Π±Ρ‹ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. ΠœΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ «мост» ΠΈΠ· happens-before. Π•Π³ΠΎ даст ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° volatile ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ b, Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ 20 Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½.

Π­Ρ‚ΠΎΡ‚ эффСкт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для получСния простой ΠΈ дСшСвой Π°Π΄Π°ΠΏΡ‚Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΊ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ срСдС Π±Π΅Π· использования слоТных ΠΈ ΠΎΡˆΠΈΠ±ΠΊΠΎΠΎΠΏΠ°ΡΠ½Ρ‹Ρ… Ρ‚Π΅Ρ…Π½ΠΈΠΊ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ ΠΈ синхронизаций.
πŸ‘28