Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ autowired Π² spring

Руководство ΠΏΠΎ вСснС @Autowired

Руководство ΠΏΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнному использованию Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ ΠΈ ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² Spring @Autowired

1. ΠžΠ±Π·ΠΎΡ€

Π”Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅Π΅ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅:

Π‘ΠΊΠ°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΡƒΠΆΠΈΠ½Π½Ρ‹Ρ… ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΈΠ½Π²Π΅Ρ€ΡΠΈΡŽ управлСния ΠΈ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ зависимостСй с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΡƒΠΆΠΈΠ½Ρ‹

Π’ этом ΡƒΡ€ΠΎΠΊΠ΅ ΠΌΡ‹ сначала рассмотрим, ΠΊΠ°ΠΊ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ автоматичСскоС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ | способы автоматичСского ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². ПозТС ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² с использованиСм @ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ, , Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… сцСнариях ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ.

2. Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ @Autowired

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ Π½Π° основС Java Π² нашСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π²ΠΊΠ»ΡŽΡ‡ΠΈΠΌ ΠΈΠ½ΡŠΠ΅ΠΊΡ†ΠΈΡŽ Π½Π° основС Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ нашСй ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Spring:

Π’ качСствС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹, аннотация Π² основном ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ внСдрСния зависимостСй Π² XML-Ρ„Π°ΠΉΠ»Π°Ρ… Spring.

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ Π² основном классС прилоТСния:

3. ИспользованиС @Autowired

3.1. @АвтоматичСски ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΊ свойствам

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ FooFormatter bean:

Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ Π²Π²Π΅Π΄Π΅ΠΌ эту Ρ„Π°ΡΠΎΠ»ΡŒ Π² Π‘Π»ΡƒΠΆΠ±Ρƒ питания Ρ„Π°ΡΠΎΠ»ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ @Autowired ΠΎΠ± ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ поля:

3.2. @АвтоматичСскоС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ сСттСрам

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ @Autowired аннотация ΠΌΠ΅Ρ‚ΠΎΠ΄Π° настройки.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ setter вызываСтся с экзСмпляром FooFormatter ΠΏΡ€ΠΈ создании Π‘Π»ΡƒΠΆΠ±Ρ‹ питания :

3.3. @АвтоматичСски ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΊ конструкторам

НаконСц, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ @Autowired Π² конструкторС.

ΠœΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ экзСмпляр FooFormatter вводится Spring Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° конструктора Foodservice :

4. @АвтоматичСскиС ΠΈ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ зависимости

Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, это ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΡΠΏΠ΅ΡˆΠ½Ρ‹ΠΉ запуск ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Spring, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ„ΠΎΡ€ΠΌΡ‹:

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ это, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°:

5. АвтоматичСскоС УстранСниС нСоднозначности

Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ этот ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ явно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Spring, ΠΊΠ°ΠΊΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ввСсти.

5.1. АвтоматичСскоС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ @ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°

НапримСр, Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ @Qualifier для указания Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°.

Π‘Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ 2 ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Ρ‚ΠΈΠΏΠ° Π€ΠΎΡ€ΠΌΠ°Ρ‚Π΅Ρ€ :

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Ѐорматирования Π² класс FooService :

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ этого, сузив Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ @ΠšΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ аннотация:

Когда сущСствуСт нСсколько ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ‚ΠΈΠΏΠ°, рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ @ΠšΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ двусмыслСнности.

ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ @ΠšΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ совпадаСт с ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΌ Π² @ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ нашСй FooFormatter Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

5.2. АвтоматичСскоС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ классификатора

Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ форматирования Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… рСализациях для указания ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ значСния:

НаконСц, наша ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠ°Ρ аннотация ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° Π³ΠΎΡ‚ΠΎΠ²Π° ΠΊ использованию для автоматичСской ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΊΠΈ:

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π² @Target ΠΌΠ΅Ρ‚Π°-Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π² нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ поля, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Ρ‚ΠΈΠΏΡ‹ ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹.

5.3. АвтоматичСскоС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ

Spring ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ имя ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π² качСствС значСния ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Он ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ с Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ Π² качСствС свойства для Π΅Π³ΠΎ автоматичСского ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

6. Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ обсудили Π°Π²Ρ‚ΠΎΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΊΡƒ ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ способы Π΅Π΅ использования. ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ рассмотрСли способы Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π΄Π²ΡƒΡ… распространСнных ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ автоматичСской ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΊΠΈ, Π²Ρ‹Π·Π²Π°Π½Π½Ρ‹Ρ… Π»ΠΈΠ±ΠΎ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ, Π»ΠΈΠ±ΠΎ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΠΉ ΠΈΠ½ΡŠΠ΅ΠΊΡ†ΠΈΠ΅ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°.

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

РусскиС Π‘Π»ΠΎΠ³ΠΈ

Spring @Autowired ΠΈ Ρ‚Ρ€ΠΈ способа Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ автоматичСскоС сканированиС

ΠŸΡ€Π΅Π΄ΠΈΡΠ»ΠΎΠ²ΠΈΠ΅:

@Autowired ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ

Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ рСализуСтся с использованиСм ΠΌΠ΅Ρ‚ΠΎΠ΄Π° set ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ класса. ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ @Autowired, сначала ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ здСсь Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ @Autowired.

1. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² сцСнарии использования Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ @Autowired

Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, основная Ρ‡Π°ΡΡ‚ΡŒ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ @Autowired

ЀактичСски, ΠΊΠΎΠ³Π΄Π° запускаСтся Spring IoC, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ автоматичСски Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ постпроцСссор AutowiredAnnotationBeanPostProcessor. Когда ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ сканируСт @Autowied, @Resource ΠΈΠ»ΠΈ @Inject, ΠΎΠ½ автоматичСски Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹ΠΉ bean-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ IoC ΠΈ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ Π΅Π³ΠΎ со свойствами ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

ΠŸΡ€ΠΈ использовании @Autowired сначала запроситС ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ‚ΠΈΠΏ bean-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅,

Π’Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚Ρ‹ΠΉ процСсс ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ аннотация @Autowired вводится Π² соотвСтствии с Ρ‚ΠΈΠΏΠΎΠΌ сборки ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΠ½Π° Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ зависимый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ сущСствовал. Если Π΅ΠΌΡƒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ null, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ для Π΅Π³ΠΎ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ false. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΈΠ½ΡŠΠ΅ΠΊΡ†ΠΈΡŽ Π² соотвСтствии с ΠΈΠΌΠ΅Π½Π΅ΠΌ, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ @ ΠšΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ вмСстС;

3. УстранитС Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ автоматичСской сборки с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ @Autowired.

Если Π² процСссС использования Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ @Autowired Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ NoUniqueBeanDefinitionException, это Π² основном связано с Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΡΡ‚ΡŒΡŽ, Π²Ρ‹Π·Π²Π°Π½Π½ΠΎΠΉ автоматичСской сборкой ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ сборки. Π’ΠΎ Π΅ΡΡ‚ΡŒ сущСствуСт Π±ΠΎΠ»Π΅Π΅ Π΄Π²ΡƒΡ… классов Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ для интСрфСйса. Π’ΠΎ Π΅ΡΡ‚ΡŒ Π²ΠΎ врСмя автоматичСской сборки ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ тяТСлая ситуация. NoUniqueBeanDefinitionException Π²Ρ‹Π·Π²Π°Π½ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΠΈΠΌΠ΅Π½ΠΈ.

@Autowired собираСтся ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ, поэтому Ρƒ мСня Π΅ΡΡ‚ΡŒ интСрфСйс UserInterface с нСсколькими классами Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

И Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅, эти классы Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Spring, ΠΊΠΎΠ³Π΄Π° Π² классС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€:

НиТС пСрСчислСны Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ нСоднозначности сборки.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ сущСствуСт Π±ΠΎΠ»Π΅Π΅ Π΄Π²ΡƒΡ… классов Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ для интСрфСйса, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° нСоднозначности Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½Π° ΠΏΡƒΡ‚Π΅ΠΌ опрСдСлСния ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ bean-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. НапримСр:

Π’ настоящСС врСмя, Ссли имССтся ссылка Π½Π° Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ класса Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ интСрфСйса IUserService, сначала внСдряСтся класс Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ @Promary, Π½ΠΎ Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ сущСствуСт ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. Π’ классС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ интСрфСйса Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ @Primary Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·. Если для AImpl Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ @primary, Ρ‚Π°ΠΊ ΠΈ BImpl, ΠΈ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ сборки ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ.Π’ настоящСС врСмя рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ (1) для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ нСоднозначности.

ΠœΠ΅Ρ‚ΠΎΠ΄ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ

Π’ послСднСм случаС Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ², Π½ΠΎ такая ситуация Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Ρ€Π΅Π΄ΠΊΠΎ, поэтому я Π½Π΅ Π±ΡƒΠ΄Ρƒ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π΅Π΅ снова, ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Baidu ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ.

Π’-Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹Ρ…, ΠΊΠ°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Spring обСспСчиваСт автоматичСская сборка?

Spring Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ сборку с Π΄Π²ΡƒΡ… Ρ‚ΠΎΡ‡Π΅ΠΊ зрСния:

ΠšΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡ сканирования ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΈ автоматичСской сборки ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠΎΡ‰Π½ΠΎΠΉ, ΠΈ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ свСсти ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΡƒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ вашСго дисплСя.

Π’-пятых, Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ @Autowired ΠΈ @Resource

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ пСрСчислСны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±Ρ‰ΠΈΠ΅ повСрхностныС различия ΠΌΠ΅ΠΆΠ΄Ρƒ @Autowired ΠΈ @Resource.Π§Ρ‚ΠΎ касаСтся ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ различия, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ @Autowired Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Spring ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ @Resource Π² Java.

(1) @Autowired внСдряСтся Π² соотвСтствии со сборкой Ρ‚ΠΈΠΏΠ° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для этого трСбуСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ зависимый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ сущСствовал. Если Π΅ΠΌΡƒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ null, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ для Π΅Π³ΠΎ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ false. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΈΠ½ΡŠΠ΅ΠΊΡ†ΠΈΡŽ Π² соотвСтствии с ΠΈΠΌΠ΅Π½Π΅ΠΌ, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ @Qualifier ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ вмСстС;

(2) @Resource ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ собираСт ΠΈΠ½ΡŠΠ΅ΠΊΡ†ΠΈΡŽ Π² соотвСтствии с ΠΈΠΌΠ΅Π½Π΅ΠΌ.Волько ΠΊΠΎΠ³Π΄Π° Π½Π΅ удаСтся Π½Π°ΠΉΡ‚ΠΈ bean-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΈΠΌΠ΅Π½ΠΈ, ΠΈΠ½ΡŠΠ΅ΠΊΡ†ΠΈΡ собираСтся Π² соотвСтствии с Ρ‚ΠΈΠΏΠΎΠΌ;

(3) аннотация @Resource прСдоставляСтся J2EE, Π° @Autowired прСдоставляСтся Spring, поэтому для ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ зависимости систСмы ΠΎΡ‚ Spring рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ @Resource;

(4) И @Resource, ΠΈ @Autowired ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ записаны ΠΈ ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Ρ‹ Π² ΠΏΠΎΠ»Π΅ ΠΈΠ»ΠΈ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ установки поля.

(5) @Resource собираСтся Π² соотвСтствии с ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Когда bean-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΈΠΌΠ΅Π½ΠΈ, Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ собран Π² соотвСтствии с Ρ‚ΠΈΠΏΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° name. Если Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ ΠΈΠΌΠ΅Π½ΠΈ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½, ΠΊΠΎΠ³Π΄Π° аннотация ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Π° Π² ΠΏΠΎΠ»Π΅, ΠΏΠΎΠ»Π΅ бСрСтся ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Имя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² качСствС ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° для поиска зависимого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.Когда аннотация ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π° Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ установки Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°, имя Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² качСствС ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° для поиска зависимого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Ссли Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ ΠΈΠΌΠ΅Π½ΠΈ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½, ΠΈ зависимый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°ΠΉΠ΄Π΅Π½ Π² соотвСтствии с ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π’ это врСмя ΠΎΠ½ вСрнСтся ΠΊ сборкС ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ, Π½ΠΎ ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ name Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Π½, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ.

Π’-ΡˆΠ΅ΡΡ‚Ρ‹Ρ…, ΠΊΠ°ΠΊ Spring запускаСт автоматичСскоС сканированиС

Π’ΠΎΡ‚ Ρ‚Ρ€ΠΈ способа Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ автоматичСскоС сканированиС.

ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ:Π’ этом случаС, для Π±ΠΎΠ»Π΅Π΅ особой ситуации, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ SpringBoot, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ @SpringBootApplication для запуска Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ автоматичСского сканирования.

ΠŸΡƒΡ‚ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠΉ: Π’ Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ XML запуститС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ автоматичСского сканирования. Π Π΅ΠΆΠΈΠΌ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ XML.

Π’Π΅Π³ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ автоматичСскоС сканированиС Spring Beans ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ base-package, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Spring Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΊΠ°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС классы, ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½Π½Ρ‹Π΅ @Component Π² этом ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ΠΈ ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°Ρ…, ΠΈ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ ΠΈΡ….

ΠŸΡƒΡ‚ΡŒ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ: Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° настройки Java запуститС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ автоматичСского сканирования.

Π’ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

(2) @ComponentScan ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ сканирования Spring Beans, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ XML, здСсь Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ basePackages. Π§Ρ‚ΠΎΠ±Ρ‹

Если аннотация @ComponentScan Π½Π΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ значСния Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ значСния Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌ здСсь, Ссли Π½Π΅Ρ‚, аннотация @ComponentScan Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΊΠ°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ с Ρ‚Π΅ΠΌ ΠΆΠ΅ классом ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ.

Π§Ρ‚ΠΎ касаСтся использования Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ @Repository, @Service, @Controller ΠΈ @Component
На ΡƒΡ€ΠΎΠ²Π½Π΅ сохраняСмости, бизнСс-ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΈ ΡƒΡ€ΠΎΠ²Π½Π΅ управлСния @Repository, @Service ΠΈ @Controller ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для аннотирования классов Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅, Π° @Component ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для аннотирования Π±ΠΎΠ»Π΅Π΅ Π½Π΅ΠΉΡ‚Ρ€Π°Π»ΡŒΠ½Ρ‹Ρ… классов. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ этот класс ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ Spring для управлСния, Π° имя ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΎ Π² userManager.ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ ΡƒΡ€ΠΎΠ²Π½ΡŽ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ этот класс, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ @Component.

БСмь, сколько ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² сборки сущСствуСт Π² Spring?

Π’ настоящСС врСмя Π² Spring Π΅ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° сборки:

8. ИспользованиС @Autowired Π² @Configuration для аннотирования ошибок IDE.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ autowired Π² spring. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ autowired Π² spring. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ autowired Π² spring. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ autowired Π² spring. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ autowired Π² springΠ·Π°Π³Π»Π°Π²ΠΈΠ΅

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

Java Blog

Spring IoC ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€: конфигурация Π½Π° основС Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ, использованиС @Autowired

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ @Autowired ΠΊ конструкторам, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

Начиная с Spring Framework 4.3, аннотация @Autowired для Ρ‚Π°ΠΊΠΎΠ³ΠΎ конструктора большС Π½Π΅ трСбуСтся, Ссли Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Π±ΠΈΠ½ для Π½Π°Ρ‡Π°Π»Π° опрСдСляСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ конструктор. Однако, Ссли доступно нСсколько конструкторов ΠΈ Π½Π΅Ρ‚ основного/стандартного конструктора, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· конструкторов Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ @Autowired, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· Π½ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ @Autowired ΠΊ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ установки, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΈ нСсколькими Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ @Autowired ΠΊ полям ΠΈ Π΄Π°ΠΆΠ΅ ΡΠΌΠ΅ΡˆΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡ… с конструкторами, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ваши Ρ†Π΅Π»Π΅Π²Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, MovieCatalog ΠΈΠ»ΠΈ CustomerPreferenceDao) ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ Π² соотвСтствии с Ρ‚ΠΈΠΏΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ для Ρ‚ΠΎΡ‡Π΅ΠΊ внСдрСния, ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹Ρ… @Autowired. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒΡΡ Π½Π΅ΡƒΠ΄Π°Ρ‡Π΅ΠΉ ΠΈΠ·-Π·Π° ошибки «no type match found» («Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ совпадСниС Ρ‚ΠΈΠΏΠΎΠ²») Π²ΠΎ врСмя выполнСния.

Для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² XML ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΈΠ»ΠΈ классов ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ сканирования ΠΏΡƒΡ‚Π΅ΠΉ ΠΊ классам, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π·Π°Ρ€Π°Π½Π΅Π΅ Π·Π½Π°Π΅Ρ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ. Однако для Ρ„Π°Π±Ρ€ΠΈΡ‡Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² @Bean Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния достаточно Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚Π΅Π»Π΅Π½. Для ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ нСсколько интСрфСйсов, ΠΈΠ»ΠΈ для ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ ΠΈΡ… Ρ‚ΠΈΠΏ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, рассмотритС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ объявлСния Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° Π² Ρ„Π°Π±Ρ€ΠΈΡ‡Π½ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ (ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ спСцифичном, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ³ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Ρ‚ΠΎΡ‡ΠΊΠΈ внСдрСния, ΡΡΡ‹Π»Π°ΡŽΡ‰ΠΈΠ΅ΡΡ Π½Π° ваш ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚).

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Spring ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ всС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΈΠ· ApplicationContext, Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ @Autowired Π² ΠΏΠΎΠ»Π΅ ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ массив этого Ρ‚ΠΈΠΏΠ°, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

Π’ΠΎ ΠΆΠ΅ самоС относится ΠΊ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ коллСкциям, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

Π’Π°ΡˆΠΈ Ρ†Π΅Π»Π΅Π²Ρ‹Π΅ bean-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ интСрфСйс org.springframework.core.Ordered ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ @Order ΠΈΠ»ΠΈ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ @Priority, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ элСмСнты Π² массивС ΠΈΠ»ΠΈ спискС ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ порядкС. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΈΡ… порядок слСдуСт порядку рСгистрации ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ Ρ†Π΅Π»Π΅Π²ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ @Order Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Ρ†Π΅Π»Π΅Π²ΠΎΠ³ΠΎ класса ΠΈ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… @Bean, ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ Π±ΠΈΠ½ΠΎΠ² (Π² случаС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ класс Π±ΠΈΠ½ΠΎΠ²). ЗначСния @Order ΠΌΠΎΠ³ΡƒΡ‚ Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Ρ‹ Π² Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… внСдрСния, Π½ΠΎ ΠΈΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π½Π΅ Π²Π»ΠΈΡΡŽΡ‚ Π½Π° порядок запуска синглтона, Ρ‡Ρ‚ΠΎ являСтся ΠΎΡ€Ρ‚ΠΎΠ³ΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, опрСдСляСмой ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡΠΌΠΈ зависимостСй ΠΈ объявлСниями @DependsOn.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ стандартная аннотация javax.annotation.Priority нСдоступна Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ @Bean, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ объявлСна ​​в ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ…. Π•Π΅ сСмантика ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ смодСлирована с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ @Order Π² сочСтании с @Primary для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°.

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ автоматичСскоС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ошибкой, ΠΊΠΎΠ³Π΄Π° для Π΄Π°Π½Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ внСдрСния ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ подходящиС подходящиС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹. Π’ случаС объявлСнного массива, ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΊΠ°Ρ€Ρ‚Ρ‹ оТидаСтся, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, ΠΎΠ΄ΠΈΠ½ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ элСмСнт.

ПовСдСниС ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ поля ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ зависимости. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ это ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, позволяя ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π½Π΅Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΠΌΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ внСдрСния, помСчая Π΅Π΅ ΠΊΠ°ΠΊ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ (Ρ‚. Π΅. устанавливая ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Π² @Autowired Ρ€Π°Π²Π½Ρ‹ΠΌ false):

ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ, Ссли Π΅Π³ΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ (ΠΈΠ»ΠΈ ΠΎΠ΄Π½Π° ΠΈΠ· Π΅Π³ΠΎ зависимостСй Π² случаС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²) нСдоступна. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ»Π΅ Π½Π΅ заполняСтся Π²ΠΎΠΎΠ±Ρ‰Π΅, Π° Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ остаСтся Π½Π° мСстС.

Волько ΠΎΠ΄ΠΈΠ½ конструктор ΠΈΠ· любого Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса bean-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ @Autowired с ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ, установлСнным Π² true, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° конструктор для автоматичСской ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΏΡ€ΠΈ использовании Π² качСствС Spring-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. Как слСдствиС, Ссли для ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° оставлСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ true, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ конструктор ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ @Autowired. Если нСсколько конструкторов ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ, всС ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ required=false, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Π² качСствС ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚ΠΎΠ² Π½Π° автопривязку (Π°Π½Π°Π»ΠΎΠ³ autowire=constructor Π² XML). Π‘ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π±Ρ€Π°Π½ конструктор с наибольшим количСством зависимостСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€Π΅Π½ ΠΏΡƒΡ‚Π΅ΠΌ сопоставлСния bean-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ Spring. Если Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚ΠΎΠ² Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€Π΅Π½, Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ основной/Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ конструктор (Ссли имССтся). Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, Ссли класс ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ нСсколько конструкторов, Π½ΠΎ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ… Π½Π΅ Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ @Autowired, Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ основной/Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ конструктор (Ссли имССтся). Если класс для Π½Π°Ρ‡Π°Π»Π° ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ конструктор, ΠΎΠ½ всСгда Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ Π½Π΅ Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΠΎΠ²Π°Π½. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ конструктор Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΌ.

ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ @Autowired рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ вмСсто ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅ΠΉ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ @Required Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… установки (сСттСры). Установка для ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° значСния false ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ свойство Π½Π΅ трСбуСтся для Ρ†Π΅Π»Π΅ΠΉ автоматичСской привязки, ΠΈ свойство игнорируСтся, Ссли ΠΎΠ½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π°Π²Ρ‚ΠΎΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ. @Required, с Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, сильнСС Π² Ρ‚ΠΎΠΌ смыслС, Ρ‡Ρ‚ΠΎ заставляСт свойство ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ срСдства, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ, ΠΈ, Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚ΡŒ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ зависимости Ρ‡Π΅Ρ€Π΅Π· java.util.Optional Java 8, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ @Autowired для интСрфСйсов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ…ΠΎΡ€ΠΎΡˆΠΎ извСстными Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅ΠΌΡ‹ΠΌΠΈ зависимостями: BeanFactory, ApplicationContext, Environment, ResourceLoader, ApplicationEventPublisher ΠΈ MessageSource. Π­Ρ‚ΠΈ интСрфСйсы ΠΈ ΠΈΡ… Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ интСрфСйсы, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ConfigurableApplicationContext ΠΈΠ»ΠΈ ResourcePatternResolver, автоматичСски Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‚ΡΡ Π±Π΅Π· ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ настройки. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ автоматичСски связываСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ApplicationContext:

Аннотации @Autowired, @Inject, @Value ΠΈ @Resource ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ рСализациями Spring BeanPostProcessor. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ эти Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Π² Π²Π°ΡˆΠΈΡ… собствСнных Ρ‚ΠΈΠΏΠ°Ρ… BeanPostProcessor ΠΈΠ»ΠΈ BeanFactoryPostProcessor (Ссли Π΅ΡΡ‚ΡŒ). Π­Ρ‚ΠΈ Ρ‚ΠΈΠΏΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ явно ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ с использованиСм XML ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Spring @Bean.

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

Аннотация @Autowired: Ρ‡Ρ‚ΠΎ ΠΊ Ρ‡Π΅ΠΌΡƒ?

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ autowired Π² spring. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ autowired Π² spring. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ autowired Π² spring. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ autowired Π² spring. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ autowired Π² spring

РСшил Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ @Autowired. ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π΅Ρ‘ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΡ‡Π΅Π½ΡŒ прост.

Допустим Ρƒ нас Π΅ΡΡ‚ΡŒ bean-зависимости:

И Π΅ΡΡ‚ΡŒ класс сСрвиса:

И ΠΏΡ€ΠΈ создании контСкста Spring автоматичСски ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚, Ρ‡Ρ‚ΠΎ для создания MyService трСбуСтся bean Ρ‚ΠΈΠΏΠ° ServiceDependency (ΠΈΠ»ΠΈ наслСдник), Π½Π°ΠΉΠ΄Ρ‘Ρ‚ Π΅Π³ΠΎ Ρƒ сСбя, Π² Ρ€Π°ΠΌΠΊΠ°Ρ… подставит Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ServiceDependencyImpl Π² bean MyService.

На самом Π΄Π΅Π»Π΅, начиная со Spring 4.0 Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ @Autowired ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π½Π° конструктор, Ссли ΠΎΠ½ СдинствСнный Π² классС.

Π”Ρ€ΡƒΠ³ΠΈΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ использования Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ

@Autowired ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ нСпосрСдствСнно Π½Π° ΠΏΠΎΠ»Π΅. Π”Π°-Π΄Π°, это Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ с private-полями:

Π’Π°ΠΊΠΆΠ΅ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π½Π° сСттСры:

Но ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΈ Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π§Ρ‚ΠΎ Π΅Ρ‰Ρ‘?

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π±ΠΈΠ½ΠΎΠ² Ρ‚ΠΈΠΏΠ° ServiceDependency нСсколько (допустим dependency1 ΠΈ dependency2). Π’ΠΎΠ³Π΄Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ bean, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ @Qualifier:

А Ссли ΠΌΡ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ всС Π±ΠΈΠ½Ρ‹?

Π‘Π΄Π΅Π»Π°Ρ‚ΡŒ это ΠΌΠΎΠΆΠ½ΠΎ простым способом:

И Spring вставит (ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ) всС Π±ΠΈΠ½Ρ‹, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ интСрфСйс ServiceDependency. Π’ΠΎ ΠΆΠ΅ самоС Π²Π΅Ρ€Π½ΠΎ ΠΈ для Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ. Как Π½ΠΈ странно, Π½ΠΎ порядком слСдования Π² этой ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ @Order.

Но самоС Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅, Π²ΠΎΡ‚ это:

Spring автоматичСски подставит Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сами Π±ΠΈΠ½Ρ‹, Π½ΠΎ ΠΈ ΠΈΠΌΠ΅Π½Π° Π±ΠΈΠ½ΠΎΠ² Π² качСствС ΠΊΠ»ΡŽΡ‡Π΅ΠΉ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ эффСктивно использовано, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π΅ «стратСгия».

Π•ΡΡ‚ΡŒ вопрос? ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ Π² коммСнтариях!

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

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

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ autowired Π² spring. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ autowired Π² spring. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ autowired Π² spring. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ autowired Π² spring. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ autowired Π² spring

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

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ autowired Π² spring. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ autowired Π² spring. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ autowired Π² spring. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ autowired Π² spring. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ autowired Π² 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:

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

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

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