Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½ java

Π£Ρ€ΠΎΠΊ 2: Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Spring IoC ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€

Π­Ρ‚ΠΎΡ‚ ΡƒΡ€ΠΎΠΊ освСщаСт Ρ€Π°Π±ΠΎΡ‚Ρƒ с Spring Framework IoC ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ ΠΈ основан Π½Π° ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Β§5. The IoC container.

Π§Ρ‚ΠΎ Π²Ρ‹ создадитС

Π’Ρ‹ создадитС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ количСство классов, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСна Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Spring Framework IoC ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°.

Π§Ρ‚ΠΎ Π²Π°ΠΌ потрСбуСтся

Настройка ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Inversion of Control (IoC), Ρ‚Π°ΠΊΠΆΠ΅ извСстноС ΠΊΠ°ΠΊ Dependency Injection (DI), являСтся процСссом, согласно ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ свои зависимости, Ρ‚.Π΅. ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚, Ρ‡Π΅Ρ€Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ конструктора/Ρ„Π°Π±Ρ€ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈΠ»ΠΈ свойства, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ установлСны ΠΈΠ»ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Ρ‹ Ρ„Π°Π±Ρ€ΠΈΡ‡Π½Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ. Π—Π°Ρ‚Π΅ΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ inject(Π΄Π°Π»Π΅Π΅ «Π²Π½Π΅Π΄Ρ€ΡΠ΅Ρ‚») эти зависимости ΠΏΡ€ΠΈ создании Π±ΠΈΠ½Π°. Π­Ρ‚ΠΎΡ‚ процСсс ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½, поэтому ΠΈ Π½Π°Π·Π²Π°Π½ Inversion of Control, Ρ‚.ΠΊ. Π±ΠΈΠ½ сам ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ располоТСниС своих зависимостСй, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ прямоС созданиС классов ΠΈΠ»ΠΈ Ρ‚Π°ΠΊΠΎΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, ΠΊΠ°ΠΊ шаблон Service Locator.

ОписаниС Ρ€Π°Π±ΠΎΡ‚Ρ‹ IoC ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½ java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½ java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½ java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½ java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½ java

ApplicationContext прСдставляСт собой Spring IoC ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, настройки ΠΈ сборки Π±ΠΈΠ½ΠΎΠ² для построСния прилоТСния.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½ java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½ java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½ java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½ java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½ java

Π’ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ описываСт ΠΊΠ°ΠΊ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ IoC ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΈ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² вашСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΡƒΡ€ΠΎΠΊΠ°Ρ… этого Ρ†ΠΈΠΊΠ»Π° Π²Π΅Π·Π΄Π΅, Π³Π΄Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½Π° основС Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ ΠΈ Java-ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ. Если Π²Ρ‹ сторонник XML-ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, Π»ΠΈΠ±ΠΎ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°ΠΊ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎΠΆΠ΅ самоС Ρ‡Π΅Ρ€Π΅Π· XML, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΏΠΎ Spring Framework ΠΈΠ»ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ модуля/ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

Настройка IoC ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°

Как Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ контСкст(Ρ‹) Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

ИспользованиС @Bean Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с Ρ‚ΠΈΠΏΠΎΠΌ GreetingService Π±Ρ‹Π» доступСн для использования, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π΅Π³ΠΎ Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

А для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ, достаточно Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

ΠœΠ΅Ρ‚ΠΎΠ΄ getBean() ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΊΠ°ΠΊ класс(ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π²Ρ‹ΡˆΠ΅), Ρ‚Π°ΠΊ ΠΈ названия Π±ΠΈΠ½Π°(ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСно Π½ΠΈΠΆΠ΅), Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ознакомится Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. Однако Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½Π΅ рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² production-конфигурациях, Ρ‚.ΠΊ. для ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… Ρ†Π΅Π»Π΅ΠΉ сущСствуСт ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Dependency Injection (DI), собствСнно говоря, для Ρ‡Π΅Π³ΠΎ ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ Spring IoC ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. ИспользованиС DI Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСно Π½ΠΈΠΆΠ΅ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Π³Π»Π°Π²Π΅.

Иногда ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ описаниС Π±ΠΈΠ½Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² цСлях ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π°. Для этого сущСствуСт аннотация @Description :

Π–ΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» Π±ΠΈΠ½Π°

ΠŸΡ€ΠΈ совмСстном использовании ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², интСрфСйсов ΠΈ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ, описанных Π²Ρ‹ΡˆΠ΅, ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΈΡ… порядок Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². Для ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ порядок Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:

Для ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ€Π°Π·Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ порядок Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:

Если Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ свою ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ модСль ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° Π±ΠΈΠ½Π°, Ρ‚ΠΎ Π² Ρ‚Π°ΠΊΠΎΠΌ случаС Π±ΠΈΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· интСрфСйсов, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π½ΠΈΠΆΠ΅:

ПослС этого Ρƒ вас появятся Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€ΡƒΡˆΠ΅Π½ΠΈΠΈ Π±ΠΈΠ½Π°. Однако стоит Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Π΅Ρ‰Ρ‘ Ρ€Π°Π·, Ρ‡Ρ‚ΠΎ это относится ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ прилоТСния, Π½Π΅ относящимся ΠΊ web-прилоТСния(ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ для Π½ΠΈΡ… примСняСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ контСкста ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² Π½ΠΈΡ… ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ).

ΠžΠ±Π»Π°ΡΡ‚ΠΈ видимости(scopes) Π±ΠΈΠ½ΠΎΠ²

Когда Π²Ρ‹ создаСтС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π±ΠΈΠ½ΠΎΠ², Π²Ρ‹ Π²Ρ‹ создаСтС Ρ€Π΅Ρ†Π΅ΠΏΡ‚ для создания экзСмпляров класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ опрСдСляСт Π±ΠΈΠ½. Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π±ΠΈΠ½ΠΎΠ² являСтся Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠΌ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, ΠΊΠ°ΠΊΠΎΠ³ΠΎ класса Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ мноТСство экзСмпляров ΠΏΠΎ этому Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρƒ.

ИспользованиС @Configuration Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ

Кода Π±ΠΈΠ½ ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Π±ΠΈΠ½Π°, Ρ‚ΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ выраТаСтся просто ΠΊΠ°ΠΊ Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°:

Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв, ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΈΠ΅ случаи, ΠΊΠΎΠ³Π΄Π° Π±ΠΈΠ½ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΡ‚ Π±ΠΈΠ½Π° Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ конфигурация являСтся источником опрСдСлСния Π±ΠΈΠ½ΠΎΠ², Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ Π½Π΅ являСтся ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, достаточно ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π΅ класса ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ с Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠ΅ΠΉ @Autowired (Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ оисано Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Π³Π»Π°Π²Π΅):

ΠŸΡ€ΠΈ этом LessonsConfiguration остаСтся Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ:

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ зависимостСй

IoC ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ выполняСт Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ зависимостСй Π±ΠΈΠ½ΠΎΠ² Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ порядкС:

Spring ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ зависимости ΠΌΠ΅ΠΆΠ΄Ρƒ Π±ΠΈΠ½Π°ΠΌΠΈ Ρ‡Π΅Ρ€Π΅Π· autowiring(Π΄Π°Π»Π΅Π΅, автоматичСскоС связываниС). Π”Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ основан Π½Π° просмотрС содСрТимого Π² ApplicationContext ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ прСимущСства:

БоотвСтствСнно, Ρƒ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ GreetingService Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ установлСна ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ аннотация @Qualifier :

Spring Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ использованиС JSR-250 @Resource Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ автоматичСского связывания для ΠΏΠΎΠ»Π΅ΠΉ класса ΠΈΠ»ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² setter-ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²:

ИспользованиС стандартных JSR-330 Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ

Spring Framework ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ JSR-330 Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ. Π­Ρ‚ΠΈ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ способом, ΠΊΠ°ΠΊ ΠΈ Spring Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π½ΠΈΠΌΠΈ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² pom.xml ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ:

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° сравнСния JSR-330 ΠΈ Spring Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ для DI:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠžΠ±Ρ€Π°Ρ‚Π½Π°Ρ сторона Spring

НСдСля Spring Π½Π° Π₯Π°Π±Ρ€Π΅, судя ΠΏΠΎ всСму, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Π°. Π₯очСтся ΡΠΊΠ°Π·Π°Ρ‚ΡŒ спасибо ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΡƒ ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ‚ΠΎΡ€Π°ΠΌ ΡΡ‚Π°Ρ‚ΡŒΠΈ «ΠŸΠΎΡ‡Π΅ΠΌΡƒ я Π½Π΅Π½Π°Π²ΠΈΠΆΡƒ Spring», которая Π½Π΅ смотря Π½Π° ΡΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Π½Π΅Π³Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ посыл Π² Π½Π°Π·Π²Π°Π½ΠΈΠΈ Π²Ρ‹Π·Π²Π°Π»Π° ряд интСрСсных дискуссий, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ ΠΎΡ‚Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Π» Π½Π° мою ΠΏΡ€ΠΎΡˆΠ»ΡƒΡŽ ΡΡ‚Π°Ρ‚ΡŒΡŽ Как ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° Spring Π² 2017. Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ благодаря коммСнтариям ΠΊ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΈ появилась эта.

Π’ этот Ρ€Π°Π· ΠΌΡ‹ погрузимся Π² ΠΏΡƒΡ‡ΠΈΠ½Ρ‹ Spring Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°, Ρ€Π°Π·ΠΎΠ±Π»Π°Ρ‡ΠΈΠΌ Π΅Π³ΠΎ магию, посмотрим ΠΊΠ°ΠΊ Π±Π°Π·ΠΎΠ²ΠΎΠ΅ Π²Π΅Π± ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ выглядит ΠΈΠ·Π½ΡƒΡ‚Ρ€ΠΈ, ΠΈ разбСрСмся, ΠΊΠ°ΠΊΡƒΡŽ-ΠΆΠ΅ Π·Π°Π΄Π°Ρ‡Ρƒ ΠΈ ΠΊΠ°ΠΊ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Spring Boot.

Π’ коммСнтариях ΠΊ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ нСсколько Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ ΠΎΡ‡Π΅Π½ΡŒ справСдливо ΡƒΠΊΠ°Π·Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Hello World-Π° Π½Π° Spring всС ΠΆΠ΅ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅Π½. Spring, особСнно с использованиСм Spring Boot, Π΄Π°Π΅Ρ‚ ΠΎΡ‰ΡƒΡ‰Π΅Π½ΠΈΠ΅ простоты ΠΈ всСмогущСства, Π½ΠΎ Π½Π΅ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ основ ΠΈ внутрСнностСй Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° Π²Π΅Π΄Π΅Ρ‚ ΠΊ большой опасности ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ стСктрСйсом ΠΏΠΎ Π»ΠΎΠ³Ρƒ. Π§Ρ‚ΠΎ ΠΆ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π²Π΅ΡΡ‚ΡŒ ΠΎΡ‰ΡƒΡ‰Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΌΠ°Π³ΠΈΠΈ происходящСго, сСгодня ΠΌΡ‹ возьмСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΈ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΈ Ρ‡Ρ‚ΠΎ происходит Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° ΠΈ ΠΎΡ‚ ΠΊΠ°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ нас ΠΎΡ‚Π³ΠΎΡ€Π°ΠΆΠΈΠ²Π°Π΅Ρ‚ Boot. ЦСлСвая аудитория всС ΠΆΠ΅ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ, Π½ΠΎ с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ ΠΈ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌΠΈ знаниями Java ΠΈ Spring. Π₯отя, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Spring Π±ΡƒΠ΄Π΅Ρ‚ интСрСсно ΠΎΡΠ²Π΅ΠΆΠΈΡ‚ΡŒ знания Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ происходит ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌ.

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ понятия

НачнСм ΡΡ€Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠΎΠΊΡ€ΠΎΠ²Ρ‹ с самых Π±Π°Π·ΠΎΠ²Ρ‹Ρ… понятий Spring. Π‘ΠΈΠ½ (bean) β€” это Π½Π΅ Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ΅, ΠΊΠ°ΠΊ самый ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π Π°Π·Π½ΠΈΡ†Π° лишь Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π±ΠΈΠ½Π°ΠΌΠΈ принято Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ Spring-ΠΎΠΌ ΠΈ ΠΆΠΈΠ²ΡƒΡ‚ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΅Π³ΠΎ DI-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Π‘ΠΈΠ½ΠΎΠΌ являСтся ΠΏΠΎΡ‡Ρ‚ΠΈ всС Π² Spring β€” сСрвисы, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρ‹, Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ, ΠΏΠΎ сути всС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ состоит ΠΈΠ· Π½Π°Π±ΠΎΡ€Π° Π±ΠΈΠ½ΠΎΠ². Π˜Ρ… ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π² качСствС зависимостСй, ΠΏΡ€ΠΎΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΌΠΎΠΊΠ°Ρ‚ΡŒ ΠΈ Ρ‚.ΠΏ.

DI ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ ΠΈ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Spring. Π’Π½Π΅ΡˆΠ½Π΅ ΠΎΡ‡Π΅Π½ΡŒ простой, Π½ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ½ прСдоставляСт ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² для Ρ‚ΠΎΠ½ΠΊΠΎΠΉ настройки зависимостСй. По сути, любоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π‘ΠΏΡ€ΠΈΠ½Π³ β€” это Π½Π°Π±ΠΎΡ€ Π±ΠΈΠ½ΠΎΠ², связанных вмСстС Ρ‡Π΅Ρ€Π΅Π· DI ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€.

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡƒΠΏΡƒΡΠΊΠ°ΡŽΡ‚ ΠΏΡ€ΠΈ обсуТдСнии DI ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ использованиС ΠΈΠ½ΡŠΠ΅ΠΊΡ†ΠΈΠΈ зависимостСй Π½Π΅ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ создания интСрфСйсов для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ простая ΠΌΡ‹ΡΠ»ΡŒ, Π½ΠΎ я ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π· Π²ΠΈΠ΄Π΅Π», Ρ‡Ρ‚ΠΎ ΠΈΠ·-Π·Π° своСй простоты ΠΎΠ½Π° Π½Π΅ всСгда ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Π°. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, созданиС интСрфСйса, Ссли Ρƒ Π½Π΅Π³ΠΎ лишь ΠΎΠ΄Π½Π° рСализация β€” считаСтся ΠΏΠ»ΠΎΡ…ΠΎΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠΉ. Π’.Π΅. классы Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ сами ΠΏΠΎ сСбС Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ DI. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, отсутствиС интСрфСйса Π΄Π°ΠΆΠ΅ Π½Π΅ ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ ΠΈΡ… ΠΌΠΎΠΊΠ°Ρ‚ΡŒ Π² тСстах, Ρ‚.ΠΊ. Mockito, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²ΠΏΠΎΠ»Π½Π΅ ΡƒΠΌΠ΅Π΅Ρ‚ ΠΌΠΎΠΊΠ°Ρ‚ΡŒ классы.

ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ

Π˜Ρ‚Π°ΠΊ, Ссли ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ β€” это Π½Π°Π±ΠΎΡ€ Π±ΠΈΠ½ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΎ Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ этот Π½Π°Π±ΠΎΡ€ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ.

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ β€” это просто описаниС доступных Π±ΠΈΠ½ΠΎΠ². Spring Π΄Π°Π΅Ρ‚ нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ², ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π°Π±ΠΎΡ€ Π±ΠΈΠ½ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π˜ΡΡ‚ΠΎΡ€ΠΈΡ‡Π΅ΡΠΊΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ β€” это Ρ‡Π΅Ρ€Π΅Π· Π½Π°Π±ΠΎΡ€ xml Ρ„Π°ΠΉΠ»ΠΎΠ². Π’ наши Π΄Π½ΠΈ Π΅ΠΌΡƒ Π½Π° смСну ΠΏΡ€ΠΈΡˆΠ»ΠΈ Java Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ. Spring Boot построСн Π½Π° аннтациях Ρ‡ΡƒΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅, Ρ‡Π΅ΠΌ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ соврСмСнных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ. Π’ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌ своСм ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠΈ, конфигурация Π±ΠΈΠ½ΠΎΠ² ΠΏΡ€ΠΈΡˆΠ»Π° ΠΊ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ рСгистрации (functional bean registration), которая станСт ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π²Π°ΠΆΠ½Ρ‹Ρ… Π½ΠΎΠ²Ρ‹Ρ… Ρ„ΠΈΡ‡ готовящСгося ΠΊ Π²Ρ‹Ρ…ΠΎΠ΄Ρƒ Spring 5.

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ класс ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚, Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊ:

Π­Ρ‚Π° конфигурация опрСдСляСт Π΄Π²Π° Π±ΠΈΠ½Π°, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π²Ρ‚ΠΎΡ€ΠΎΠΉ зависит ΠΎΡ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ. И здСсь Π² ΠΈΠ³Ρ€Ρƒ вступит Spring – ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ просим ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ инстанс PaymentProvider β€” Spring Π½Π°ΠΉΠ΄Π΅Ρ‚ Π΅Π³ΠΎ Π² контСкстС ΠΈ прСдоставит Π½Π°ΠΌ.

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅, ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ Π½Π° нСсколько ΠΈ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ ΠΈΡ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ @Import Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ.

Π‘ΠΊΠ°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²

РСзюмС

Spring Boot

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ части. Допустим, Π½Π°ΠΌ Π½Π°Π΄ΠΎ ΡΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ MySQL Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Если ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Spring Data JPA с Hibernate Π² качСствС ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π°, Π½Π°ΠΌ потрСбуСтся ΡΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нСсколько Π±ΠΈΠ½ΠΎΠ² β€” EntityManagerFactory (основной класс JPA), DataSource для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ нСпосрСдствСнно ΠΊ Π±Π°Π·Π΅ Ρ‡Π΅Ρ€Π΅Π· JDBC Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΈ Ρ‚.ΠΏ. Но с Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Ссли ΠΌΡ‹ это Π΄Π΅Π»Π°Π΅ΠΌ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΈ, ΠΏΠΎ сути, Π΄Π΅Π»Π°Π΅ΠΌ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ β€” ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π±Ρ‹ это Π½Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ? Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, Ссли ΠΌΡ‹ ΡƒΠΊΠ°Π·Π°Π»ΠΈ строку ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ Π±Π°Π·Π΅ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ Π½Π° MySQL Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ β€” ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π±Ρ‹ Ρ‡Π΅ΠΌΡƒ-Ρ‚ΠΎ автоматичСски Π½Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ всС Π½ΡƒΠΆΠ½Ρ‹Π΅ Π±ΠΈΠ½Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с MySQL? ИмСнно это ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ Spring Boot. По сути, Spring Boot это просто Π½Π°Π±ΠΎΡ€ классов ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Π½ΡƒΠΆΠ½Ρ‹Π΅ Π±ΠΈΠ½Ρ‹ Π² контСкстС. Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ€ΡƒΠΊΠ°ΠΌΠΈ, просто Boot это Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚.

Автоконфигурация

Π’Π°ΠΆΠ½ΠΎΠ΅ понятиС Spring Boot это автоконфигурация. По сути, это просто Π½Π°Π±ΠΎΡ€ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… классов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ ΠΈ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π±ΠΈΠ½Ρ‹ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. По Π±ΠΎΠ»ΡŒΡˆΠΎΠΌΡƒ счСту, Π΄Π°ΠΆΠ΅ сам Embedded Servlet Container β€” это просто Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Π±ΠΈΠ½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ! ΠŸΠ°Ρ€Π° Π²Π°ΠΆΠ½Ρ‹Ρ… ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π°ΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΎΠ± Π°Π²Ρ‚ΠΎΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ:

Условия ΠΈ порядок рСгистрации Π±ΠΈΠ½ΠΎΠ²

Π›ΠΎΠ³ΠΈΠΊΠ° ΠΏΡ€ΠΈ рСгистрации Π±ΠΈΠ½ΠΎΠ² управляСтся Π½Π°Π±ΠΎΡ€ΠΎΠΌ @ConditionalOn* Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ. МоТно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±ΠΈΠ½ создавался ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ класса Π² classpath ( @ConditionalOnClass ), Π½Π°Π»ΠΈΡ‡ΠΈΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Π±ΠΈΠ½Π° ( @ConditionalOnBean ), отсуствии Π±ΠΈΠ½Π° ( @ConditionalOnMissingBean ) ΠΈ Ρ‚.ΠΏ.

Spring Boot Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ эти Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ Π½Π΅Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹ΠΌ ΠΈ Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ.

ΠŸΠΎΠ³Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Π² Hello World

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, имСя Π² запасС Π±Π°Π·ΠΎΠ²Ρ‹Π΅ тСорСтичСскиС знания, Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ Ρ‡Ρ‚ΠΎ ΠΆΠ΅ происходит ΠΏΡ€ΠΈ запускС прилоТСния.

Π˜Ρ‚Π°ΠΊ, нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄:

Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ Ρ‡Ρ‚ΠΎ здСсь происходит ΠΏΠΎ шагам.

Класс DemoApplication

Π’.Π΅. Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ @SpringBootApplication Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ сканированиС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², Π°Π²Ρ‚ΠΎΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ ΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ€Π°Π·Π½Ρ‹ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ Spring (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ тСстам), Ρ‡Ρ‚ΠΎ это Spring Boot ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

SpringApplication.run()

Π’ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ‚.ΠΊ. класс AnnotationConfigEmbeddedWebApplicationContext Π½Π°ΠΉΠ΄Π΅Ρ‚ Π² контСкстС Π±ΠΈΠ½ Ρ‚ΠΈΠΏΠ° EmbeddedServletContainerFactory ΠΈ Ρ‡Π΅Ρ€Π΅Π· Π½Π΅Π³ΠΎ создаст ΠΈ запустит встроСнный ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ всС это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ±Ρ‰Π΅Π³ΠΎ DI ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ этот класс ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ самим.

@EnableAutoConfiguration

Π­Ρ‚Π° аннотация Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π°Π²Ρ‚ΠΎΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ. И здСсь, ΠΏΠΎΠΆΠ°Π»ΡƒΠΉ, ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π² Ρ€Π°Π·Π²Π΅Π½Ρ‡Π°Π½ΠΈΠΈ ΠΌΠ°Π³ΠΈΠΈ Spring. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ объявлСна эта аннотация:

Π’.Π΅. это самый ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΈΠΌΠΏΠΎΡ€Ρ‚ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, ΠΏΡ€ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ Π²Ρ‹ΡˆΠ΅. Класс ΠΆΠ΅ EnableAutoConfigurationImportSelector (ΠΈ Π΅Π³ΠΎ ΠΏΡ€Π΅Π΅ΠΌΠ½ΠΈΠΊ Π² Spring Boot 1.5+ β€” AutoConfigurationImportSelector ) это просто конфигурация, которая Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ нСсколько Π±ΠΈΠ½ΠΎΠ² Π² контСкст. Однако, Ρƒ этого класса Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½Π° Ρ‚ΠΎΠ½ΠΊΠΎΡΡ‚ΡŒ β€” ΠΎΠ½ Π½Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ Π±ΠΈΠ½Ρ‹ сам, Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ.

Класс EnableAutoConfigurationImportSelector смотрит Π² Ρ„Π°ΠΉΠ» spring.factories ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ΠΎΡ‚Ρ‚ΡƒΠ΄Π° список Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ классов (Π°Π²Ρ‚ΠΎ)ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Spring Boot ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚.

Π’.Π΅. аннотация @EnableAutoConfiguration просто ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ всС пСрСчислСнныС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹Π΅ Π±ΠΈΠ½Ρ‹ Π² контСкст прилоТСния.

По сути, Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π° Ρ€ΡƒΡ‡Π½ΠΎΠΉ ΠΈΠΌΠΏΠΎΡ€Ρ‚ Π½ΡƒΠΆΠ½Ρ‹Ρ… ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ:

Однако, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Spring Boot пытаСтся ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ всС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ (Π° ΠΈΡ… ΠΎΠΊΠΎΠ»ΠΎ сотни). Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρƒ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ читатСля ΡƒΠΆΠ΅ появилась ΠΏΠ°Ρ€Π° вопросов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ стоит ΠΏΡ€ΠΎΡΡΠ½ΠΈΡ‚ΡŒ.

«ΠΠΎ это ΠΆΠ΅ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ!». И Π΄Π°, ΠΈ Π½Π΅Ρ‚ β€” ΠΏΠΎΠ΄ Ρ€ΡƒΠΊΠΎΠΉ Π½Π΅Ρ‚ Ρ‚ΠΎΡ‡Π½Ρ‹Ρ… Ρ†ΠΈΡ„Ρ€, Π½ΠΎ сам ΠΏΠΎ сСбС процСсс Π°Π²Ρ‚ΠΎΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΎΡ‡Π΅Π½ΡŒ быстрый (порядка сотни миллисСкунд Π½Π° абстрактной машинС Π² Π²Π°ΠΊΡƒΡƒΠΌΠ΅)

ΠšΡ€Π°Ρ‚ΠΊΠΎΠ΅ Ρ€Π΅Π·ΡŽΠΌΠ΅

Π’ основС «ΠΌΠ°Π³ΠΈΠΈ» Spring Boot Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ магичСского, ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ понятия ΠΈΠ· Spring Framework. Π’ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠΌ Π²ΠΈΠ΄Π΅ процСсс ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ слоТно, Π½ΠΎ ΠΏΠΎ большСй части Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π²Π»Π΅Π·Π°Ρ‚ΡŒ Π²ΠΎ внутрСнности Π°Π²Ρ‚ΠΎΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ, Ссли Ρ€Π΅Ρ‡ΡŒ Π½Π΅ ΠΈΠ΄Π΅Ρ‚ ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ΅ Π°Π²Ρ‚ΠΎ-ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ для своСй Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅.

Диагностика

Auto-configuration report

Π’ ΠΎΡ‚Π²Π΅Ρ‚ Spring выдаст Π΄Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ Auto-configuration report:

Π‘Ρ‚Ρ€ΠΎΡ‡ΠΊΠ° Π² Positive / Negative matches Π±ΡƒΠ΄Π΅Ρ‚ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Π½ΠΎΠΉ Π°Π²Ρ‚ΠΎΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Boot сообщит, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Ρ‚ΠΎΡ‚ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ Π±ΠΈΠ½ Π±Ρ‹Π» создан (Ρ‚.Π΅. ΡƒΠΊΠ°ΠΆΠ΅Ρ‚, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ· условий рСгистрации Π±Ρ‹Π»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹).

Actuator

Spring Boot Actuator это ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт диагностики Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π³ΠΎ прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΌΠ΅Π΅Ρ‚ Π΄Π°Π²Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠΈ (Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Π½Π°Π±ΠΎΡ€ этих ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ ΠΈΠ· прилоТСния).

РСзюмС

Spring всС ΠΆΠ΅ остаСтся большим ΠΈ Π½Π΅ самым простым Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠΌ, Π½ΠΎ это Ρ†Π΅Π½Π° высокоуровнСвых абстракций, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ прСдоставляСт. И хотя Π·Π½Π°Ρ‚ΡŒ всС тонкости Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° Π² Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ, Π·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈΠ·Π½ΡƒΡ‚Ρ€ΠΈ, всС ΠΆΠ΅, ΠΏΠΎΠ»Π΅Π·Π½ΠΎ. НадСюсь, Ρ‡Ρ‚ΠΎ эта ΡΡ‚Π°Ρ‚ΡŒΡ ΠΏΠΎΠΌΠΎΠ³Π»Π° ΠΏΠΎΠ½ΡΡ‚ΡŒ Π²Π°ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈ Ρ†Π΅Π½Π½ΠΎΡΡ‚ΡŒ Spring ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΊΠ°ΠΊ экосистСмы ΠΈ ΡƒΠ±Ρ€Π°Π»Π° Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ «ΠΌΠ°Π³ΠΈΡ‡Π½ΠΎΡΡ‚ΠΈ» Π² происходящСм, особСнно ΠΏΡ€ΠΈ использовании Spring Boot. Мой совСт β€” Π½Π΅ Π±ΠΎΠΉΡ‚Π΅ΡΡŒ ΡƒΠ³Π»ΡƒΠ±Π»ΡΡ‚ΡŒΡΡ Π² Π½Π΅Π΄Ρ€Π° Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°, Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ исходники ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ, Π±Π»Π°Π³ΠΎ ΠΎΠ½ΠΈ Ρƒ Spring-a ΠΏΠΎΡ‡Ρ‚ΠΈ эталонныС, Π½Π° ΠΌΠΎΠΉ взгляд.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Java Beans

Π― Ρ‚ΡƒΡ‚ ΠΏΠΎΠ΄ΡƒΠΌΠ°Π» ΠΈ Ρ€Π΅ΡˆΠΈΠ» ΡƒΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ‚Π΅Π±Π΅ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ ΠΌΠ°Π»Π΅Π½ΡŒΠΊΡƒΡŽ Π»Π΅ΠΊΡ†ΠΈΡŽ, которая Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π΅Π±Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Π°. Пока Ρ‚Ρ‹ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π» программистом, Ρ‚Ρ‹, скорСС всСго, Π½Π΅ сталкивался со ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ, ΠΈ я Ρ…ΠΎΡ‡Ρƒ тСбя сСйчас ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒ с нСсколькими распространёнными понятиями.

Π›Π΅Ρ‚ 10 Π½Π°Π·Π°Π΄ массовоС распространСниС ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π° концСпция EJB – E nterprise J ava B eans.

β€” А Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚ Java Beans?

β€” Bean ΠΏΠΎ-английски Π±ΠΎΠ±. А Java Beans – это, стало Π±Ρ‹Ρ‚ΡŒ, ΠΊΠΎΡ„Π΅ΠΉΠ½Ρ‹Π΅ Π±ΠΎΠ±Ρ‹ (Java – сорт ΠΊΠΎΡ„Π΅). Π’Π°ΠΊΠΎΠΉ Π°ΠΉΡ‚ΠΈΡˆΠ½Ρ‹ΠΉ ΡŽΠΌΠΎΡ€.

БизнСс-Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ прСдставляли Π² Π²ΠΈΠ΄Π΅ Π½Π°Π±ΠΎΡ€Π° высокоуровнСвых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² – Π±ΠΈΠ½ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΌΠ΅Π»ΠΈ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ сообщСниями, ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ сСбя, Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π° ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ, ΠΈ Π΅Ρ‰Π΅ ΠΊΡƒΡ‡Ρƒ всСго. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ это Π΄ΠΎΡΡ‚ΠΈΠ³Π°Π»ΠΎΡΡŒ Π·Π° счСт ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ супСр-Π½Π°Π²ΠΎΡ€ΠΎΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса, хотя Π±Ρ‹Π»ΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹. ПовСдСниС Ρ‚Π°ΠΊΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΎΡ‡Π΅Π½ΡŒ Ρ€Π΅Π³Π»Π°ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΎΡΡŒ.

Π’Ρ€ΠΈ самых извСстных Π²ΠΈΠ΄Π° EJB-Π±ΠΈΠ½ΠΎΠ²:

Entity Bean – Π±ΠΈΠ½, Ρ†Π΅Π»ΡŒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ β€” Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅. Π’ Π»ΠΎΠ³ΠΈΠΊΡƒ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π±ΠΈΠ½Π° встроСн ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ сохранСния сСбя ΠΈ своих ΠΏΠΎΠ»Π΅ΠΉ Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…. Π’Π°ΠΊΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½, Π° ΠΏΠΎΡ‚ΠΎΠΌ воссоздан ΠΈΠ· Π±Π°Π·Ρ‹ Π·Π°Π½ΠΎΠ²ΠΎ. Но ΠΊΡ€ΠΎΠΌΠ΅ хранСния Π΄Π°Π½Π½Ρ‹Ρ… Ρƒ Π½Π΅Π³ΠΎ Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ.

Session Bean – это Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Π±ΠΈΠ½. Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Session Bean Π΅ΡΡ‚ΡŒ своя функция. Один Π΄Π΅Π»Π°Π΅Ρ‚ ΠΎΠ΄Π½ΠΎ, Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π΄Ρ€ΡƒΠ³ΠΎΠ΅. Π’Π°ΠΊΠΈΠ΅ Π±ΠΈΠ½Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ ΠΈ Π±ΠΈΠ½Π°ΠΌΠΈ, Π° Π½Π΅ со своими Π΄Π°Π½Π½Ρ‹ΠΌΠΈ.

Session Beans дСлятся Π½Π° Π΄Π²Π΅ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ.

Stateless Session Bean – это Π±ΠΈΠ½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π²Π°ΠΆΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΡƒΠΆΠ½Ρ‹Ρ… для Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹. Π’Π°ΠΊΠΎΠΉ Π±ΠΈΠ½ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠΈΡ‚ΡŒ, Π° Π·Π°Ρ‚Π΅ΠΌ Π·Π°Π½ΠΎΠ²ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ, ΠΈ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ свою Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΊΠ°ΠΊ ΠΈ Ρ€Π°Π½ΡŒΡˆΠ΅.

Statefull Session Bean – это Π±ΠΈΠ½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…Ρ€Π°Π½ΠΈΡ‚ Ρƒ сСбя Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅. Если ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ этого Π±ΠΈΠ½Π°, Ρ‚ΠΎ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Ρ… Π΅ΠΌΡƒ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ…. И всС Ρ€Π°Π²Π½ΠΎ этот Π±ΠΈΠ½ – это Π½Π΅ Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

Но Π² использовании Π±ΠΈΠ½ΠΎΠ² Ρ‚ΠΎΠΆΠ΅ Π±Ρ‹Π»ΠΎ Π½Π΅ всС Ρ‚Π°ΠΊ Ρ€Π°Π΄ΡƒΠΆΠ½ΠΎ, поэтому скоро маятник качнулся Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ сторону. И Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ стали всС Ρ‡Π°Ρ‰Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Им Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π»ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅.

POJO ( P lain O ld J ava O bject) – старый ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ Java-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π’Π°ΠΊΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π½Π΅ ΠΎΠ±Π»Π°Π΄Π°Π»ΠΈ ΠΊΠ°ΠΊΠΈΠΌΠΈ-Ρ‚ΠΎ супСрфункциями ΠΈ Π½Π΅ наслСдовались ΠΎΡ‚ ΡΡƒΠΏΠ΅Ρ€ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π‘Π°ΠΌΡ‹Π΅ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ Java-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.

Π‘ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ Π² Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²/классов Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° спСциализация. Как Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ – Π²Ρ‹Π΄Π΅Π»ΠΈΠ»ΠΈΡΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€ΠΎΠ»ΠΈ, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π½ΠΎΠ²Ρ‹Π΅ названия.

DTO β€” Data Transfer Object – ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаСтся с Ρ†Π΅Π»ΡŒΡŽ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΏΡ€ΠΈ транспортировкС Π΄Π°Π½Π½Ρ‹Ρ…. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΊ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ Π΄Π²Π° трСбования: Π°) ΡƒΠΌΠ΅Ρ‚ΡŒ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, Π±) ΡƒΠΌΠ΅Ρ‚ΡŒ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ. Π’.Π΅. ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для пСрСсылки Π΄Π°Π½Π½Ρ‹Ρ….

Π‘ΠΎΠ·Π΄Π°Π» ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, записал Π² Π½Π΅Π³ΠΎ Π½ΡƒΠΆΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ, сСриализовал Π² JSON/XML ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ» ΠΊΡƒΠ΄Π°-Π½Π°Π΄ΠΎ. Или Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚ – ΠΏΡ€ΠΈΡˆΠ»ΠΎ сообщСниС – дСсСриализовал Π΅Π³ΠΎ Π² DTO-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ вытягивай ΠΈΠ· Π½Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹Π΅.

Entity – это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ хранится Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Но ΠΎΠ½ΠΈ Π½Π΅ содСрТат Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ. МоТно ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ это – Π΄Π°Π½Π½Ρ‹Π΅ бизнСс-ΠΌΠΎΠ΄Π΅Π»ΠΈ.

Π•ΡΡ‚ΡŒ Π΅Ρ‰Π΅ DAO – Data Access Object. Π—Π°Π΄Π°Ρ‡Π° DAO β€” ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² Π±Π°Π·Ρƒ ΠΈ Π΄ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒ ΠΈΡ… ΠΈΠ· Π½Π΅Π΅. Entity сам Ρ‚Π°ΠΊΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ Π½Π΅ занимаСтся – ΠΎΠ½ Π½Π΅ содСрТит Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½ΠΈΠΊΡƒΠ΄Π° ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ.

ΠŸΡƒΡΡ‚ΡŒ это ΠΈ нСбольшая ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ лСкция, Π½ΠΎ большС Ρ‚Ρ‹ сСйчас всС Ρ€Π°Π²Π½ΠΎ Π½Π΅ поймСшь. ΠšΠ°ΠΆΠ΄ΡƒΡŽ ΠΈΠ· этих Ρ‚Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ днями Ρ€Π°ΡΡΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ, Π° EJB – Π³ΠΎΠ΄Π°ΠΌΠΈ.

Но я Ρ…ΠΎΡ‡Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚Ρ‹ хотя Π±Ρ‹ прСдставлял, ΠΎ Ρ‡Π΅ΠΌ Ρ€Π΅Ρ‡ΡŒ, Ссли ΡΡ‚ΠΎΠ»ΠΊΠ½Ρ‘ΡˆΡŒΡΡ с Ρ‚Π°ΠΊΠΈΠΌΠΈ Π²Π΅Ρ‰Π°ΠΌΠΈ Π² Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€Π΅, пСрСпискС, Π½Π° Ρ„ΠΎΡ€ΡƒΠΌΠ΅ ΠΈΠ»ΠΈ Π½Π° собСсСдовании.

β€” Π“ΠΌ. Бпасибо, Π‘ΠΈΠ»Π°Π°Π±ΠΎ. Π”Π°, Π΄ΡƒΠΌΠ°ΡŽ, тСхничСских Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ² ΠΌΠ½Π΅ Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚. Бпасибо большоС Ρ‚Π΅Π±Π΅ Π΅Ρ‰Π΅ Ρ€Π°Π·.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° ΠΊ Spring Professional Certification. ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, IoC, Π±ΠΈΠ½Ρ‹

Π”ΠΎΠ±Ρ€ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ суток, Π₯Π°Π±Ρ€.

БСгодня я Ρ€Π΅ΡˆΠΈΠ» ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π²Π°ΠΌ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ Ρ†ΠΈΠΊΠ»Π° статСй для ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ ΠΊ Spring Professional Certification.

Π­Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ, Ссли ΠΎΠ½ Π·Π°ΠΉΠ΄Π΅Ρ‚ Π°ΡƒΠ΄ΠΈΡ‚ΠΎΡ€ΠΈΠΈ, я ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΡƒ выпуск ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠ².

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½ java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½ java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½ java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½ java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½ java

Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ зависимостСй β€” это ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ связь ΠΌΠ΅ΠΆΠ΄Ρƒ Spring ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ DI, ваш ΠΊΠΎΠ΄ становится Ρ‡ΠΈΡ‰Π΅, ΠΏΡ€ΠΎΡ‰Π΅, Π΅Π³ΠΎ становится Π»Π΅Π³Ρ‡Π΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΈ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.
Богласно ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρƒ DI, созданиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² для зависимостСй ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π½Π° Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ ΠΈΠ»ΠΈ отдаСтся Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ сторонС. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° использовании этих ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² вмСсто ΠΈΡ… создания.

Π’ Spring Framework интСрфСйс org.springframework.factory.BeanFactory прСдоставляСт Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ для Π±ΠΈΠ½ΠΎΠ², которая Π² Ρ‚ΠΎ ΠΆΠ΅ врСмя являСтся IoC ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ прилоТСния. Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π±ΠΈΠ½Π°ΠΌΠΈ основано Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ(java ΠΈΠ»ΠΈ xml).

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ org.springframework.context.ApplicationContext β€” это ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠ° Π½Π°Π΄ bean factory, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π°Ρ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ возмоТности, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ AOP, Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ, i18n, ΠΈ Ρ‚.ΠΏ.

Основа Spring Framework β€” ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, ΠΈ наши ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ «ΠΆΠΈΠ²ΡƒΡ‚» Π² этом ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅.
ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ создаСт мноТСство ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π° основС ΠΈΡ… ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ ΠΈ управляСт ΠΈΡ… ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ ΠΎΡ‚ создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΄ΠΎ уничтоТСния.

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ β€” это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ интСрфСйс ApplicationContext.

Spring обСспСчиваСт нСсколько разновидностСй контСкста.

Π•ΡΡ‚ΡŒ нСсколько основных Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ интСрфСйса ApplicationContext:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ создания контСкста:

Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ JUnit 5, Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ 2 Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ:

Если это Π½Π΅ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ 2 способа:

Π’ Spring Boot ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ:

Π­Ρ‚ΠΎΡ‚ класс помСстит Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ экзСмпляр класса DataSource. ПозднСС Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ доступС ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ….

Component scanning(сканированиС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²) β€” Spring автоматичСски ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ Π±ΠΈΠ½Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅. Π­Ρ‚ΠΎ Π±ΠΈΠ½Ρ‹ с аннотациями-стСрСотипами.

ComponentΠšΠΎΡ€Π½Π΅Π²Π°Ρ аннотация, которая ΠΏΠΎΠΌΠ΅Ρ‡Π°Π΅Ρ‚ класс ΠΊΠ°ΠΊ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚ для автовнСдрСния
ControllerΠ£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ класс являСтся ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠΌ для отправлСния Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° Ρ„Ρ€ΠΎΠ½Ρ‚.
@RestControllerΠ£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ класс являСтся ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠΌ для REST.
Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Controller ΠΈ @ResponseBody
ServiceΠ£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ класс являСтся сСрвисом для выполнСния бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ
RepositoryΠ£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ класс являСтся Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΌ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π±Π΄
@ConfigurationΠ£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ класс содСрТит Java-ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ(@Bean-ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹)

ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости β€” scope, скоуп. БущСствуСт 2 области видимости ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

SingletonΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π’ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ находится всСго 1 экзСмпляр Π±ΠΈΠ½Π°
PrototypeΠ’ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ находится любоС количСство экзСмпляров Π±ΠΈΠ½Π°

И 4 области видимости Π² Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.

RequestΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости β€” 1 HTTP запрос. На ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ запрос создаСтся Π½ΠΎΠ²Ρ‹ΠΉ Π±ΠΈΠ½
SessionΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости β€” 1 сСссия. На ΠΊΠ°ΠΆΠ΄ΡƒΡŽ сСссию создаСтся Π½ΠΎΠ²Ρ‹ΠΉ Π±ΠΈΠ½
ApplicationΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости β€” ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» ServletContext
WebSocketΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости β€” ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» WebSocket

ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости указываСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ @Scope Π½Π° @Bean ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ….

Prototype Scope Π½Π΅ потокбСзопасный, Ρ‚.ΠΊ. ΠΎΠ½ Π½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‡Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ экзСмпляр Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² 1 ΠΏΠΎΡ‚ΠΎΠΊΠ΅.

Singleton Scope ΠΆΠ΅ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚ потокобСзопасный.

Singleton-Π±ΠΈΠ½Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ сразу ΠΏΡ€ΠΈ сканировании.
Prototype-Π±ΠΈΠ½Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС запроса.

Singleton bean ΠΌΠΎΠΆΠ½ΠΎ Π²Π½Π΅Π΄Ρ€ΡΡ‚ΡŒ Π² любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π±ΠΈΠ½.

Prototype ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒΡŽ для любого Π±ΠΈΠ½Π°.
Π’Π½Π΅Π΄Ρ€ΡΡ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ singleton ΠΈΠ»ΠΈ prototype.

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ кастомный BFPP. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ получСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· ΠΌΠ΅Ρ‚Π°Ρ„Π°ΠΉΠ»ΠΎΠ².

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½ java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½ java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½ java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½ java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½ java

Π•ΡΡ‚ΡŒ 3 Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° для создания Ρ‚Π°ΠΊΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²:

НиТС пСрСчислСны Ρ‚ΠΈΠΏΡ‹ DI, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ Π² вашСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ:

DI Ρ‡Π΅Ρ€Π΅Π· конструктор считаСтся самым Π»ΡƒΡ‡ΡˆΠΈΠΌ способом, Ρ‚.ΠΊ. для Π½Π΅Π³ΠΎ Π½Π΅ Π½Π°Π΄ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Ρ„Π»Π΅ΠΊΡΠΈΡŽ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ½ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ нСдостатков DI Ρ‡Π΅Ρ€Π΅Π· сСттСр.
DI Ρ‡Π΅Ρ€Π΅Π· ΠΏΠΎΠ»Π΅ Π½Π΅ рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‚.ΠΊ. для этого примСняСтся рСфлСксия, ΡΠ½ΠΈΠΆΠ°ΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.
DI Ρ‡Π΅Ρ€Π΅Π· конструктор ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ цикличСским зависимостям. Π§Ρ‚ΠΎΠ±Ρ‹ этого ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»Π΅Π½ΠΈΠ²ΡƒΡŽ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π±ΠΈΠ½ΠΎΠ² ΠΈΠ»ΠΈ DI Ρ‡Π΅Ρ€Π΅Π· сСттСр.

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ DI с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ AutowiredAnnotationBeanPostProcessor. Π’ связи с этим, аннотация Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использована Π½ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ BeanFactoryPP ΠΈΠ»ΠΈ BeanPP.

Если внСдряСмый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ массив, коллСкция, ΠΈΠ»ΠΈ map с Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠΌ, Ρ‚ΠΎ Spring Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ всС Π±ΠΈΠ½Ρ‹ подходящиС ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ Π² этот массив(ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΡƒΡŽ структуру Π΄Π°Π½Π½Ρ‹Ρ…). Π’ случаС с map ΠΊΠ»ΡŽΡ‡ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ имя Π±ΠΈΠ½Π°.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ внСдрСния:

Spring прСдоставляСт Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ Qualifier, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅ΠΎΠ΄ΠΎΠ»Π΅Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ нСоднозначности ΠΏΡ€ΠΈ DI.

Если Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ Π΅ΡΡ‚ΡŒ нСсколько Π±ΠΈΠ½ΠΎΠ² ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°(SomeClass), Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎΡ‚ Π±ΠΈΠ½, Π½Π°Π΄ @Bean-ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ стоит ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€. Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄, Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ имя Π±ΠΈΠ½Π° Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°.
Имя Π±ΠΈΠ½Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Bean, Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ это имя Ρ„Π°Π±Ρ€ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

ΠŸΡ€ΠΎΠΊΡΠΈ это ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΠ΅ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΊΠ°ΠΊ ΠΈ Π±ΠΈΠ½, Π½ΠΎ Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΅ΡΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.
Π”Π²Π° Π²ΠΈΠ΄Π° прокси:

Если Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ Π½Π΅Ρ‚ экзСмпляра Π±ΠΈΠ½Π°, Ρ‚ΠΎ вызываСтся @Bean-ΠΌΠ΅Ρ‚ΠΎΠ΄. Если экзСмпляр Π±ΠΈΠ½Π° Π΅ΡΡ‚ΡŒ, Ρ‚ΠΎ возвращаСтся ΡƒΠΆΠ΅ созданный Π±ΠΈΠ½.

Π’ эту ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π½Π΅Π΄Ρ€Π΅Π½Π° строка, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· property ΠΈΠ»ΠΈ ΠΈΠ· view.

Как ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, ΠΏΡ€ΠΎΡΡŒΠ±Π° ΠΏΡ€ΠΈΡΡ‹Π»Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΊΠΈ ΠΈΠ»ΠΈ Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Π΅ ошибки Π² Π»ΠΈΡ‡ΠΊΡƒ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *