Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring

Руководство ΠΏΠΎ Spring. ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ IoC.

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ элСмСнтом Spring Framework являСтся Spring Container. Container создаёт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, связываСт ΠΈΡ… вмСстС, настраиваСт ΠΈ управляСт ΠΈΠΌΠΈ ΠΎΡ‚ создания Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° уничтоТСния.

Для управлСния ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… состоит ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Spring Container ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ ЗависимостСй (DI). Π­Ρ‚ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Spring Beans, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ обсудим Π΄Π°Π»Π΅Π΅.

Spring Container ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ инструкции ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠ½ΡΡ‚Π°Π½Ρ†ΠΈΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΊΠ°ΠΊ ΠΈΡ… ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅.

ΠœΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹ 3 способами:
– XML
– Аннотации Java
– Java ΠΊΠΎΠ΄

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring

На ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅, которая находится Π²Ρ‹ΡˆΠ΅ схСматично ΠΏΠΎΠΊΠ°Π·Π°Π½ этот процСсс.
Java POJO классы поступаСт Π² Spring Container, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π° основании инструкций, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅, Π²Ρ‹Π΄Π°Ρ‘Ρ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ΅ ΠΊ использованию.

Π’ Spring имССтся 2 Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π²ΠΈΠ΄Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ²:
1. Spring BeanFactory Container;
2. Spring ApplicationContext Container;

Spring BeanFactory Container

Π­Ρ‚ΠΎ самый простой ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ Π±Π°Π·ΠΎΠ²ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ DI ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ основан Π½Π° интСрфСйсС org.springframework.beans.factory.BeanFactory. Π’Π°ΠΊΠΈΠ΅ интСрфСйсы, ΠΊΠ°ΠΊ BeanFactoryAware ΠΈ DisposableBean всё Π΅Ρ‰Ρ‘ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π² Spring для обСспСчСния ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости.
НаиболСС часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ рСализация интСрфСйса BeanFactory – XmlBeanFactory.
XmlBeanFactory ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ XML Ρ„Π°ΠΉΠ»Π° ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ для создания настроСнного прилоТСния ΠΈΠ»ΠΈ систСмы.

BeanFactory ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° рСсурсы ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ (ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Π΅ устройства). ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ссли рСсурсы Π½Π΅ сильно ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹, Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ApplicationContext.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» message-bean.xml

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΏΠΎ Π­Π’ΠžΠ™ Π‘Π‘Π«Π›ΠšΠ•.

Spring ApplicationContext Container

ApplicationContext являСтся Π±ΠΎΠ»Π΅Π΅ слоТным ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹ΠΌ Spring Container-ΠΎΠΌ. Π’Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ BeanFactory, ApplicationContext Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ Π±ΠΈΠ½Ρ‹, связываСт ΠΈΡ… вмСстС ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΡ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Но ΠΊΡ€ΠΎΠΌΠ΅ этого, ApplicationContext ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ: распознаниС тСкстовых сообщСний ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ² настройки ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ событий, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ происходят Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ способами. Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ опрСдСляСтся интСрфСйсом org.springframework.context.ApplicationContext.

Π§Π°Ρ‰Π΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ AppicationContext:

– FileSystemXmlApplicationContext
Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ Π±ΠΈΠ½Π΅ ΠΈΠ· XML Ρ„Π°ΠΉΠ»Π°. ΠŸΡ€ΠΈ использовании этой Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² конструкторС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ адрСс ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°.

– ClassPathXmlApplicationContext
Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ Π±ΠΈΠ½Π΅ ΠΈΠ· XML Ρ„Π°ΠΉΠ»Π°. Но Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ FileSystemApplicationContext, Π² этом случаС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ адрСс ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° (CLASSPATH).

– WebXmlApplicationContext
Π­Ρ‚Π° рСализация ApplicationContext ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈΠ· Π²Π΅Π±-прилоТСния.

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ создания простого Spring прилоТСния ΠΌΡ‹ ΡƒΠΆΠ΅ использовали ClassPathXmlApplicationContext. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ FileSystemXmlApplicationContext.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» message-bean.xml

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° доступСн ΠΏΠΎ Π­Π’ΠžΠ™ Π‘Π‘Π«Π›ΠšΠ•.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅
Как ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ ΠΈΠ· этого руководства – ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ApplicationContext ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ большСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ, Ρ‡Π΅ΠΌ BeanFactory, поэтому Ссли ΠΌΡ‹ Π½Π΅ находимся Π² условиях ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ограничСнности рСсурсов, Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ являСтся использованиС ApplicationContext.

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

IoC, DI, IoC-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ β€” ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΎ простом

Π”ΡƒΠΌΠ°ΡŽ сСйчас слова IoC, DI, IoC-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Ρƒ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π½Π° слуху. Одни этим Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ, Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΆΠ΅ это Π·Π° ΠΌΠΎΠ΄Π½Ρ‹Π΅ вСяния.

На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, Π½Π° эту Ρ‚Π΅ΠΌΡƒ ΡƒΠΆΠ΅ довольно сказано, написано, Π² Ρ‚ΠΎΠΌ числС ΠΈ Π½Π° Ρ…Π°Π±Ρ€Π΅, Π½ΠΎ ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΈΠ·-Π·Π° обилия ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ слоТно Π½Π°ΠΉΡ‚ΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π΄Π°Π½Π½Ρ‹Π΅ понятия часто ΡΠΌΠ΅ΡˆΠΈΠ²Π°ΡŽΡ‚ ΠΈ/ΠΈΠ»ΠΈ ΠΏΡƒΡ‚Π°ΡŽΡ‚. ΠŸΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π² мноТСства ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² я Ρ€Π΅ΡˆΠΈΠ» ΠΈΠ·Π»ΠΎΠΆΠΈΡ‚ΡŒ Π²Π°ΠΌ своС Π²ΠΈΠ΄Π΅Π½ΠΈΠ΅ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π°.

ВСория

Для мСня взаимосвязь ΠΌΠ΅ΠΆΠ΄Ρƒ IoC ΠΈ DI такая ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΌΠ΅ΠΆΠ΄Ρƒ Agile ΠΈ Scrum, Ρ‚.Π΅.
Inversion of Control (инвСрсия управлСния) β€” это Π½Π΅ΠΊΠΈΠΉ абстрактный ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ, Π½Π°Π±ΠΎΡ€ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΉ для написания слабо связанного ΠΊΠΎΠ΄Π°. Π‘ΡƒΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ систСмы Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ…, Π½Π΅ полагаясь Π² своСй Ρ€Π°Π±ΠΎΡ‚Π΅ Π½Π° Π΄Π΅Ρ‚Π°Π»ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ².
Dependency Injection (Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ зависимостСй) β€” это ΠΎΠ΄Π½Π° ΠΈΠ· Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ этого ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° (ΠΏΠΎΠΌΠΈΠΌΠΎ этого Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ Factory Method, Service Locator).
IoC-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ β€” это какая-Ρ‚ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, которая ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ написаниС ΠΊΠΎΠ΄Π° с использованиСм Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Π½Π° ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ, Π½Π° сколько это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Π˜Ρ… довольно ΠΌΠ½ΠΎΠ³ΠΎ, ΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ Ρ‚Π΅ΠΌ, Ρ‡Π΅ΠΌ Π²Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, я ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽ всС Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ninject.

ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°

Богласно ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρƒ инвСрсии управлСния Ссли Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π½Π΅ΠΊΠΈΠΉ сСрвис, Ρ‚ΠΎ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄Π΅Π»Π°Ρ‚ΡŒ это Π½Π΅ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, Π° Ρ‡Π΅Ρ€Π΅Π· посрСдника, своСго Ρ€ΠΎΠ΄Π° аутсорсинг.
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring
Π’ΠΎ ΠΊΠ°ΠΊ тСхничСски это Π±ΡƒΠ΄Π΅Ρ‚ сдСлано ΠΈ опрСдСляСт каТдая ΠΈΠ· Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° IoC.
ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ DI, Π½Π° простом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:
Π‘ΠΊΠ°ΠΆΠ΅ΠΌ Π΅ΡΡ‚ΡŒ Π½Π΅ΠΊΠΈΠΉ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаСт расписаниС, Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ класс Π΅Π³ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ (ΠΈΡ… ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ, скаТСм ΠΎΠ΄ΠΈΠ½ для дСсктоп-прилоТСния, Π΄Ρ€ΡƒΠ³ΠΎΠΉ для Π²Π΅Π±Π° ΠΈ Ρ‚.Π΄.).
Если Π±Ρ‹ ΠΌΡ‹ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π·Π½Π°Π»ΠΈ ΠΎ IoC, DI ΠΌΡ‹ Π±Ρ‹ написали Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ этого:

Π’Ρ€ΠΎΠ΄Π΅ Π±Ρ‹ всС Ρ…ΠΎΡ€ΠΎΡˆΠΎ, ΠΊΠΎΠ΄ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΠΎΡΡ‚Π°Π²Π»Π΅Π½Π½ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ, Π½ΠΎ Ρ‡Ρ‚ΠΎ Ссли ΠΌΡ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΠΌ Π² послСдствии ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° расписаний ΠΈ/ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько Ρ‚Π°ΠΊΠΈΡ… ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠ² ΠΈ динамичСски ΠΈΡ… Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ. Π’ΠΎΠ³Π΄Π° Π² послСдствии Π½Π°ΠΌ придСтся ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π² ScheduleViewer, Π° Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΈ снова Π΅Π³ΠΎ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.
К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ, Π»Π΅Π½ΠΈΠ²Ρ‹Π΅ люди Π² Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΌ смыслС этого слова, ΠΈ Π½Π΅ Π»ΡŽΠ±ΡΡ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎΠΆΠ΅ Π΄Π²Π°ΠΆΠ΄Ρ‹.

ΠœΡ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ΠΌ зависимостСй (DI) для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·ΠΎΡ€Π²Π°Ρ‚ΡŒ этот ΠΊΠ»ΡƒΠ±ΠΎΠΊ ΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… Π½ΠΈΡ‚ΠΎΠΊ β€” сдСлаСм связь ΠΌΠ΅ΠΆΠ΄Ρƒ этими классами Π±ΠΎΠ»Π΅Π΅ слабой, Π΄ΠΎΠ±Π°Π²ΠΈΠ² прослойку Π² Π²ΠΈΠ΄Π΅ интСрфСйса IScheduleManager. И Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ Π΅Π΅ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· способов Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ DI, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Constructor Injection (ΠΏΠΎΠΌΠΈΠΌΠΎ этого Π΅ΡΡ‚ΡŒ Setter Injection ΠΈ Method Injection β€” Ссли Π² Π΄Π²ΡƒΡ… словах, Ρ‚ΠΎ Π²Π΅Π·Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ интСрфСйс вмСсто ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ класса, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² Ρ‚ΠΈΠΏΠ΅ свойства ΠΈΠ»ΠΈ Π² Ρ‚ΠΈΠΏΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°):

И Π΄Π°Π»Π΅Π΅ Ρ‚Π°ΠΌ Π³Π΄Π΅ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ нашим классом для отобраТСния расписания ΠΌΡ‹ пишСм:

Π’ΠΎΡ‚ ΡƒΠΆΠ΅ ΠΏΠΎΡ‡Ρ‚ΠΈ идСально, Π½ΠΎ Ρ‡Ρ‚ΠΎ Ссли Ρƒ нас ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ScheduleViewer, разбросанных ΠΏΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ всСгда ΠΈΠΌΠ΅Π½Π½ΠΎ ScheduleManager (придСтся Π΅Π³ΠΎ Ρ€ΡƒΠΊΠ°ΠΌΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ) ΠΈ/ΠΈΠ»ΠΈ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΊΠ°ΠΊ-Π»ΠΈΠ±ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π±Ρ‹ Π² ΠΎΠ΄Π½ΠΎΠΉ ситуации Π²Π΅Π·Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ScheduleManager, Π° Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ скаТСм AnotherScheduleManager ΠΈ Ρ‚.Π΄.
Π Π΅ΡˆΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΈ ΠΏΡ€ΠΈΠ·Π²Π°Π½Ρ‹ IoC-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹.

IoC-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹

Они ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ количСство Ρ€ΡƒΡ‚ΠΈΠ½Ρ‹, позволяя Π·Π°Π΄Π°Ρ‚ΡŒ соотвСтствиС ΠΌΠ΅ΠΆΠ΄Ρƒ интСрфСйсом ΠΈ Π΅Π³ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡ‚ΠΎΠΌ Π²Π΅Π·Π΄Π΅ этим ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ.
Как я ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ» Π²Ρ‹ΡˆΠ΅, ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ это Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ninject β€”
1. Π‘Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ создаСм ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Π΅Π·Π΄Π΅ Π³Π΄Π΅ трСбуСтся IScheduleManager Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒΡΡ ScheduleManager.
2. Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ сам ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, указывая Π΅Π³ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ‚ΠΎΡ€:

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ сам создаст экзСмпляр класса ScheduleManager, Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ конструктор ScheduleViewer ΠΈ подставит Π² Π½Π΅Π³ΠΎ свСТСсозданный экзСмпляр ScheduleManager.

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

Π£Ρ€ΠΎΠΊ 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 ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring

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

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring

Π’ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ описываСт ΠΊΠ°ΠΊ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ 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:

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

Π Π°Π±ΠΎΡ‚Π° с IoC-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ Π² Spring

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ рассказываСтся ΠΎ ΡˆΠ°Π±Π»ΠΎΠ½Π°Ρ… проСктирования, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… строится Ρ€Π°Π±ΠΎΡ‚Π° со Spring-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ ΠΈ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠΌ классом ΠΎΠ½ прСдставлСн Π²ΠΎ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ΅ Spring.

ΠœΡ‹ создадим ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π±ΠΈΠ½Ρ‹, создаСтся ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΈ ΠΈΠ· Π½Π΅Π³ΠΎ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡŽΡ‚ΡΡ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ Π±ΠΈΠ½Ρ‹.

Π˜Π½Π²Π΅Ρ€ΡΠΈΡ управлСния (Inversion of Control) – Ρ‡Ρ‚ΠΎ это

ΠšΠ»ΡŽΡ‡Π΅Π²Π°Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ прилоТСния, написанного Π½Π° Spring, состоит Π² Ρ‚ΠΎΠΌ Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² создаСм Π½Π΅ ΠΌΡ‹, Π° Spring. ΠœΡ‹ лишь ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΡƒΠ΅ΠΌ классы (с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ Π»ΠΈΠ±ΠΎ Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΌ XML), Ρ‡Ρ‚ΠΎΠ±Ρ‹ Β«ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒΒ» Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΡƒ Spring, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π·Π° нас, ΠΈ полями ΠΊΠ°ΠΊΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΡ… ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ. Spring управляСт созданиСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ ΠΏΠΎΡ‚ΠΎΠΌΡƒ Π΅Π³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ называСтся IoC-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. IoC Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ΡΡ ΠΊΠ°ΠΊ Inversion of Control. А ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ ΠΈ находятся ΠΏΠΎΠ΄ Π΅Π³ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π±ΠΈΠ½Π°ΠΌΠΈ.

Π˜Π»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊ:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ Π½Π° Π²Ρ…ΠΎΠ΄ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Spring ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚:

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

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ зависимости (Dependency Injection)

Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ зависимости β€” это ΠΈ Π΅ΡΡ‚ΡŒ инициализация ΠΏΠΎΠ»Π΅ΠΉ Π±ΠΈΠ½ΠΎΠ² Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Π±ΠΈΠ½Π°ΠΌΠΈ (зависимостями).

Π’Π΅Π΄ΡŒ ΠΏΠΎΠΌΠΈΠΌΠΎ создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Spring-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ внСдряСт эти ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΈΡ… полями Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Иногда это выглядит магичСски – Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ способСн Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ Π² ΠΏΠΎΠ»Π΅ с ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ private, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅Ρ‚ сСттСра. Как ΠΆΠ΅ ΠΊΠΎΠ΄ Spring ΠΌΠΎΠΆΠ΅Ρ‚ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ? Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ€Π΅Ρ„Π»Π΅ΠΊΡΠΈΡŽ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ это Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ. Но эти Π΄Π΅Ρ‚Π°Π»ΠΈ для нас ΠΊΠ°ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π½Π΅ Π²Π°ΠΆΠ½Ρ‹, Π³Π»Π°Π²Π½ΠΎΠ΅ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΡƒ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚Π΄Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ Π΅Π³ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅, ΠΈ Π² ΠΊΠ°ΠΊΠΈΠ΅ поля Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡ… Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ.

ΠšΡΡ‚Π°Ρ‚ΠΈ, шаблон Dependency Injection Π½Π΅ привязан ΠΊ Spring, это всСго лишь инициализация поля класса. Π­Ρ‚ΠΎ такая обычная Π²Π΅Ρ‰ΡŒ ΠΈ Ρ‚Π°ΠΊ часто встрСчаСтся Π² ΠΊΠΎΠ΄Π΅ (Ρ‡Π΅Ρ€Π΅Π· конструктор Π»ΠΈΠ±ΠΎ сСттСр), Ρ‡Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ странно Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ Π΅Π΅ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ шаблон. Π’ связи со Spring это Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΌΠ΅Π»ΡŒΠΊΠ°Π΅Ρ‚ часто Π½Π°Π²Π΅Ρ€Π½ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ выполняСт Spring, ΠΈ Ρƒ программиста Ρ‚ΡƒΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΠΎΠ·Π½ΠΈ с ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ зависимостСй. Но с Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, созданиС ΠΈ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ Spring-ΠΎΠΌ β€” это ΡƒΠΆΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠΉ шаблон β€” инвСрсия контроля (IoC).

Класс ApplicationContext для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с IoC ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ

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

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² pom.xml Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ:

ПослСднюю Π²Π΅Ρ€ΡΠΈΡŽ зависимости ΠΌΠΎΠΆΠ½ΠΎ Π²Π·ΡΡ‚ΡŒ Ρ‚ΡƒΡ‚.

Класс ApplicationContext

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ сущСствуСт Π½Π΅ ΠΎΠ΄ΠΈΠ½ класс. Но ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ всСго Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с классом ApplicationContext. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π² Π½Π΅ΠΌ Π±ΠΈΠ½Ρ‹, Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляр класса ApplicationContext.

Как ΡƒΠΆΠ΅ сказано, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ для создания Π±ΠΈΠ½ΠΎΠ². трСбуСтся конгфигурация, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ конструктор ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Π²Π° подкласса ApplicationContext: ClassPathXmlApplicationContext Π±Π΅Ρ€Π΅Ρ‚ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ ΠΈΠ· XML-Ρ„Π°ΠΉΠ»Π°, Π° AnnotationConfigApplicationContext – ΠΈΠ· Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ:

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎΡ‚ Π²ΠΈΠ΄ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² вашСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ это Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ, XML Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ устарСл.

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

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, ΠΈ ΠΎΠ½ создал Π±ΠΈΠ½Ρ‹, появляСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡ… ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ нСпосрСдствСнно ΠΈΠ· ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Π₯отя это Π½Π΅ всСгда Π½ΡƒΠΆΠ½ΠΎ, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ. ДСлаСтся это Ρ‚Π°ΠΊ:

ΠœΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π±ΠΈΠ½ Ρ‚ΠΈΠΏΠ° Animal ΠΈΠ· ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π² ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ сконфигурирован Π² нашСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΅Π³ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ сконфигурируСм.

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ Π±ΠΈΠ½ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ

Π—Π°Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ Π±ΡƒΠ΄Π΅ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это Π±ΠΎΠ»Π΅Π΅ соврСмСнный ΠΈ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ способ.

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, создадим класс ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΈ Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΡƒΠ΅ΠΌ Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ @Configuration:

Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, допустим, Ρƒ нас Π΅ΡΡ‚ΡŒ класс Animal, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ Π±ΠΈΠ½ΠΎΠΌ:

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Animal Π±ΠΈΠ½ΠΎΠΌ, создадим Π² классС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄,ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаСт ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Animal, ΠΈ Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΡƒΠ΅ΠΌ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ @Bean:

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

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ спроситС, Π² Ρ‡Π΅ΠΌ смысл этого, вСдь всС Ρ€Π°Π²Π½ΠΎ ΠΌΡ‹ создаСм экзСмпляр Animal ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ. Π“Π΄Π΅ ΠΆΠ΅ польза ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°?

Π”Π°, ΠΌΡ‹ прописываСм ΠΌΠ΅Ρ‚ΠΎΠ΄, ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΠΈΠΉ Animal. Но ΠΌΡ‹ Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ этот ΠΌΠ΅Ρ‚ΠΎΠ΄. ΠœΡ‹ просто создаСм ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. А ΠΌΠ΅Ρ‚ΠΎΠ΄ вызываСтся ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ Π²ΠΎ врСмя Π΅Π³ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. И учитывая Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π±ΠΈΠ½Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½ΠΎ, Π²Ρ‹Π³ΠΎΠ΄Π° Π΅ΡΡ‚ΡŒ. К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΎΠ½ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ Π² СдинствСнном экзСмплярС (хотя это зависит ΠΎΡ‚ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ) ΠΈ Π²Π½Π΅Π΄Ρ€ΡΡŽΡ‚ΡΡ Π² поля Π΄Ρ€ΡƒΠ³ΠΈΡ… Π±ΠΈΠ½ΠΎΠ² согласно ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ автоматичСски.

ΠŸΡ€ΠΈΡ‡Π΅ΠΌ вмСсто создания Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ @Bean ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΌΠΎΠΆΠ½ΠΎ Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ класс Animal ΠΈΠ·Π½ΡƒΡ‚Ρ€ΠΈ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠ΅ΠΉ @Component – Π° это ΠΈ вовсС ΠΎΠ΄Π½Π° строчка.

О Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ Π±ΠΈΠ½ΠΎΠ² Π² поля Π΄Ρ€ΡƒΠ³ΠΈΡ… Π±ΠΈΠ½ΠΎΠ², Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΡΡ‚Π°Ρ‚ΡŒΡŽ ΠΏΡ€ΠΎ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ зависимостСй.

Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ аннотациями @Bean ΠΈ @Component Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ @Bean Π±ΠΎΠ»Π΅Π΅ гибкая аннотация, Сю ΠΌΡ‹ Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΡƒΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄, Π° Π½Π΅ класс:

Π”Π°Π²Π°ΠΉΡ‚Π΅ сконфигурируСм Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π±ΠΈΠ½ Man с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ @Component:

Волько ΡƒΡ‡Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ссли ΠΌΡ‹ Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΡƒΠ΅ΠΌ классы с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ @Component, Ρ‚ΠΎ Π² Ρ„Π°ΠΉΠ» ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ @ComponentScan для автоматичСского поиска этих Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… классов. Π’ Π½Π΅ΠΉ Π½Π°Π΄ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ имя ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π»Π΅ΠΆΠ°Ρ‚ эти классы. Π’ этом ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΈΡ… Π½Π°ΠΉΡ‚ΠΈ автоматичСски.

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² Ρ„Π°ΠΉΠ» ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΎΠ΄Π½Ρƒ строчку с Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠ΅ΠΉ @ComponentScan ΠΈ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Π° для поиска Π±ΠΈΠ½ΠΎΠ²:

ВсС Π±ΠΈΠ½Ρ‹, Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ @ComponentScan, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π»Π΅ΠΆΠ°Ρ‚ΡŒ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ Β«ru.javalang.iocΒ».

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π° Π±ΠΈΠ½Π° Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ:

ΠœΡ‹ рассмотрСли, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ IoC-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈ ΠΊΠ°ΠΊ ΠΈΠ· Π½Π΅Π³ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π±ΠΈΠ½Ρ‹. Π’Π°ΠΊΠΆΠ΅ ΠΌΡ‹ ΡƒΠ·Π½Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ½Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ @Bean ΠΈ @Component.

Π˜ΡΡ…ΠΎΠ΄Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° для этой ΡΡ‚Π°Ρ‚ΡŒΠΈ доступСн Π½Π° GitHub.

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

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

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

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

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

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring

Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ зависимостСй β€” это ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ связь ΠΌΠ΅ΠΆΠ΄Ρƒ 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. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ получСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· ΠΌΠ΅Ρ‚Π°Ρ„Π°ΠΉΠ»ΠΎΠ².

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ioc ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ spring

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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