ΠΊΠ°ΠΊΠΈΠ΅ ΡΠΈΠΏΡ autowire Π΅ΡΡΡ Π² spring ΠΏΠΎ ΡΠΈΠΏΡ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ
ΠΡΠ±ΠΎΡ Π±ΠΈΠ½Π° Π΄Π»Ρ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ: @Qualifier, @Named, @Resource
Π Π±ΠΎΠ»ΡΡΠΈΡ
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ
, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΡ
Π½Π° Spring (ΠΈΠ»ΠΈ Π»ΡΠ±ΠΎΠΌ Π΄ΡΡΠ³ΠΎΠΌ IoC ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ΅), ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΡΡΡΠΏΠΈΡΡ ΡΠ°ΠΊΠΎΠΉ Π΄Π΅Π½Ρ, ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΈ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎΡΡΡ: ΠΎΠ΄Π½ΠΎΠΉ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΠ΅Ρ ΡΡΠ°Π·Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±ΠΈΠ½ΠΎΠ², Π²Π΅Π΄Ρ Π²ΡΠ±ΠΎΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ ΡΠΈΠΏΠΎΠ² Π²Π½Π΅Π΄ΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΈ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ Π±ΠΈΠ½ΠΎΠ². Π§ΡΠΎ ΠΆΠ΅ ΡΠΎΠ³Π΄Π° ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄ΡΡ?
ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ°
ΠΠ°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΠΉ ΠΏΡΡΡΠΎΠΉ maven ΠΏΡΠΎΠ΅ΠΊΡ Ρ Spring ΠΈ JUnit:
Π ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΈ Π΄Π²Π΅ Π΅Π³ΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ:
ΠΠ΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΡΠ΅ Π±ΠΈΠ½Ρ
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° Ρ Π±Ρ Ρ ΠΎΡΠ΅Π» ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ, ΡΡΠΎ ΠΆΡ Π²ΡΡ ΡΠ°ΠΊΠΈ Π±ΡΠ΄Π΅Ρ, Π΅ΡΠ»ΠΈ ΠΌΡ ΠΎΠ±ΡΡΠ²ΠΈΠΌ ΠΊΠΎΠ½ΠΊΡΡΡ Β«ΠΠ²Π° Π±ΠΈΠ½Π° Π½Π° ΠΎΠ΄Π½ΠΎ ΠΌΠ΅ΡΡΠΎΒ» 🙂 ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Spring ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ Π΄Π»Ρ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ, Ρ ΡΠ΅ΡΠΈΠ» ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ ΠΈΡ Π²ΡΠ΅:
ΠΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ΅Π½:
Π ΡΠ΅ΡΡΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ ΠΊ Π½Π΅ΠΌΡ. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΡΠ΅ΡΡΡ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΈ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΡΠ΅ΡΡΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ Π»ΠΈΡΡ ΠΎΠ΄ΠΈΠ½:
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌ:
ΠΠ΅ΡΠ²Π½ΡΠΉ Π²ΡΠ±ΠΎΡ Π±ΠΈΠ½Π° ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ
ΠΠ΄Π½ΠΎ ΠΈΠ· ΡΠ°ΠΌΡΡ ΠΏΡΠΎΡΡΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ, ΡΡΠΎ Π½Π°ΠΌΠ΅ΠΊΠ½ΡΡΡ SpringβΡ, ΠΊΠ°ΠΊΠΎΠΉ Π±ΠΈΠ½ Π½Π°ΠΌ Π½ΡΠΆΠ΅Π½, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΈΠΌΠ΅Π½Π° ΠΏΠΎΠ»Π΅ΠΉ.
ΠΠ°ΠΆΠ΄ΡΠΉ Π±ΠΈΠ½ Π² Spring context ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΡ ΠΈΠΌΡ. ΠΡΠΎ ΠΈΠΌΠ΅ ΠΏΠΎΡΠΎΠΆΠ΄Π°Π΅ΡΡΡ Π»ΠΈΠ±ΠΎ ΠΈΠ· ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠ»Π°ΡΡΠ°, Π»ΠΈΠ±ΠΎ ΡΠ²Π½ΠΎ Π·Π°Π΄Π°ΡΡΡΡ Π² xml ΠΈ grovvy ΠΊΠΎΠ½ΡΠΈΠ³Π°Ρ , Π»ΠΈΠ±ΠΎ Π±Π΅ΡΡΡΡΡ ΠΈΠ· ΠΈΠΌΠ΅Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π±ΠΈΠ½Π° Π² java config.
ΠΡΠ»ΠΈ ΠΌΡ Π½Π°Π·ΠΎΠ²ΡΠΌ ΠΏΠΎΠ»Π΅ Ρ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΡΠΌ ΡΠΈΠΏΠΎΠΌ Π±ΠΈΠ½Π° ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ Π±ΠΈΠ½Π°, Spring ΡΠΌΠΎΠΆΠ΅Ρ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌ Π²ΡΠ±ΠΎΡ:
ΠΠ΅ΡΠ²Π½ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡΠΌΠΈ:
Π―Π²Π½ΠΎΠ΅ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π±ΠΈΠ½Π° ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ
ΠΠ»Ρ ΡΠ΅Ρ , ΠΊΡΠΎ Π½Π΅ Π»ΡΠ±ΠΈΡ βconvention-over-configurationβ, Π² Spring Π΅ΡΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ @Qualifier, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ°Ρ ΡΠ²Π½ΠΎ Π·Π°Π΄Π°ΡΡ ΠΈΠΌΡ Π½ΡΠΆΠ½ΠΎΠ³ΠΎ Π±ΠΈΠ½Π°:
Π’Π΅ΡΡΡ ΠΎΡΡΠ°ΡΡΡΡ ΡΠ΅ΠΌΠΈ ΠΆΠ΅ ΡΠ°ΠΌΡΠΌΠΈ ΠΈ ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅ ΠΏΡΠΎΡ ΠΎΠ΄ΡΡ:
@Qualifier ΠΈ Π·Π°Π΄Π°Π½ΠΈΠ΅ Π±ΠΈΠ½Π° ΠΏΠΎ ΡΠΈΠΏΡ
ΠΠ»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠΎΠΉ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ Π²Π½Π°ΡΠ°Π»Π΅ Π½ΡΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ, ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π±ΠΈΠ½Π°:
Π ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΡΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ ΠΈ ΠΊ ΠΊΠ»Π°ΡΡΡ Π±ΠΈΠ½Π° ΠΈ ΠΊ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ:
@Named ΠΊΠ°ΠΊ Π΄ΡΡΠ³ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠΊΠ°Π·Π°Π½ΠΈΡ Π±ΠΈΠ½Π° ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ
JSR-330 ΠΏΠΎΠΌΠΈΠΌΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ @Qualifier ΠΏΡΠΈΠ½ΡΡ ΠΈ Π°Π½Π°Π»ΠΎΠ³ ΡΡΠ°ΡΠΎΠ³ΠΎ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ @Named ΠΈ Π²Π΅Π΄ΡΡ ΡΠ΅Π±Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
@Resource ΠΈ Π²ΡΡ Π΅ΡΡ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π±ΠΈΠ½Π° ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ
ΠΡΠΆΠ½ΠΎβ¦Π±ΠΎΠ»ΡΡΠ΅β¦Π±ΠΈΠ½ΠΎΠ²β¦
ΠΠ° ΡΠ»ΡΡΠ°ΠΉ, Π΅ΡΠ»ΠΈ Π½ΡΠΆΠ½Ρ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π²ΡΠ΅ Π±ΠΈΠ½Ρ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ³Π΄Π° ΡΠΎΡΠ½ΠΎΠ΅ ΠΈΠΌΡ Π±ΠΈΠ½Π° Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Π²Π½Π΅Π΄ΡΠΈΡΡ ΠΈΡ Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ:
ΠΠΎΡΡΠ΄ΠΎΠΊ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ Π±ΠΈΠ½ΠΎΠ² Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½. ΠΠ½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ Π±ΠΈΠ½ΠΎΠ² ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡΠΌΠΈ.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ
Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, Π²ΡΠ±ΠΎΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ Π±ΠΈΠ½Π° ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΈΠ»ΠΈ ΠΏΠΎ ΡΠΈΠΏΡ ΡΠΏΠΈΡΠ°Π΅ΡΡΡ Π² Π²ΠΎΠΏΡΠΎΡ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ. Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎ ΡΠΈΠΏΡ, Ρ @Qualified ΠΈΠ· JSR-330 ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎ ΡΠ²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠΉ Π±ΠΈΠ½ Ρ Π΅Π³ΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ, Π½ΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΊΠΎΠ΄ Π²ΠΎΠΎΠ±ΡΠ΅, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΡΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌ, Π΅ΡΠ»ΠΈ ΠΈΠΌΡ Π±ΡΠ΄Π΅Ρ Π½Π΅ ΡΠΎ ΠΈΠ»ΠΈ Π½Π΅ Ρ ΡΠΎΠ³ΠΎ Π±ΠΈΠ½Π°.
ΠΠΎΠ΄ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π½Π° github. Π’Π΅ΡΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ fail ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΎΡΡΠ°Π²Π»Π΅Π½Ρ ΠΏΡΠΎΠ²Π°Π»ΠΈΠ²Π°ΡΡΠΈΠΌΠΈΡΡ.
Π ΡΡΡΠΊΠΈΠ΅ ΠΠ»ΠΎΠ³ΠΈ
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: ΡΡΠΎ ΠΊ ΡΠ΅ΠΌΡ?
Π Π΅ΡΠΈΠ» ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ @Autowired. ΠΡΠΈΠ½ΡΠΈΠΏ Π΅Ρ ΡΠ°Π±ΠΎΡΡ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡ.
ΠΠΎΠΏΡΡΡΠΈΠΌ Ρ Π½Π°Ρ Π΅ΡΡΡ bean-Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ:
Π Π΅ΡΡΡ ΠΊΠ»Π°ΡΡ ΡΠ΅ΡΠ²ΠΈΡΠ°:
Π ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Spring Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡ, ΡΡΠΎ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ MyService ΡΡΠ΅Π±ΡΠ΅ΡΡΡ bean ΡΠΈΠΏΠ° ServiceDependency (ΠΈΠ»ΠΈ Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊ), Π½Π°ΠΉΠ΄ΡΡ Π΅Π³ΠΎ Ρ ΡΠ΅Π±Ρ, Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΏΠΎΠ΄ΡΡΠ°Π²ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ServiceDependencyImpl Π² bean MyService.
ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅, Π½Π°ΡΠΈΠ½Π°Ρ ΡΠΎ Spring 4.0 Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ @Autowired ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΡΡΠ°Π²ΠΈΡΡ Π½Π° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ, Π΅ΡΠ»ΠΈ ΠΎΠ½ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ Π² ΠΊΠ»Π°ΡΡΠ΅.
ΠΡΡΠ³ΠΈΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ
@Autowired ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠ°Π²ΠΈΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π½Π° ΠΏΠΎΠ»Π΅. ΠΠ°-Π΄Π°, ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΈ Ρ private-ΠΏΠΎΠ»ΡΠΌΠΈ:
Π’Π°ΠΊΠΆΠ΅ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠ°Π²ΠΈΡΡ Π½Π° ΡΠ΅ΡΡΠ΅ΡΡ:
ΠΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅ ΡΡΠ°Π²ΠΈΡΡ ΠΈ Π½Π° ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
Π§ΡΠΎ Π΅ΡΡ?
ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ Π±ΠΈΠ½ΠΎΠ² ΡΠΈΠΏΠ° ServiceDependency Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ (Π΄ΠΎΠΏΡΡΡΠΈΠΌ dependency1 ΠΈ dependency2). Π’ΠΎΠ³Π΄Π°, ΡΡΠΎΠ±Ρ Π·Π°Π΄Π°ΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ bean, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ @Qualifier:
Π Π΅ΡΠ»ΠΈ ΠΌΡ Π·Π°Ρ ΠΎΡΠΈΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΡΠ΅ Π±ΠΈΠ½Ρ?
Π‘Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΡΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ:
Π Spring Π²ΡΡΠ°Π²ΠΈΡ (ΡΠ΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ) Π²ΡΠ΅ Π±ΠΈΠ½Ρ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ServiceDependency. Π’ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ Π²Π΅ΡΠ½ΠΎ ΠΈ Π΄Π»Ρ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΉ. ΠΠ°ΠΊ Π½ΠΈ ΡΡΡΠ°Π½Π½ΠΎ, Π½ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠΌ ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ Π² ΡΡΠΎΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ @Order.
ΠΠΎ ΡΠ°ΠΌΠΎΠ΅ Π·Π°ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅, Π²ΠΎΡ ΡΡΠΎ:
Spring Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΠ΄ΡΡΠ°Π²ΠΈΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΌΠΈ Π±ΠΈΠ½Ρ, Π½ΠΎ ΠΈ ΠΈΠΌΠ΅Π½Π° Π±ΠΈΠ½ΠΎΠ² Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΊΠ»ΡΡΠ΅ΠΉ. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΏΠ°ΡΡΠ΅ΡΠ½Π΅ Β«ΡΡΡΠ°ΡΠ΅Π³ΠΈΡΒ».
ΠΡΡΡ Π²ΠΎΠΏΡΠΎΡ? ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ !
ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° ΠΊ Spring Professional Certification. ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, IoC, Π±ΠΈΠ½Ρ
ΠΠΎΠ±ΡΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΡΡΠΎΠΊ, Π₯Π°Π±Ρ.
Π‘Π΅Π³ΠΎΠ΄Π½Ρ Ρ ΡΠ΅ΡΠΈΠ» ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ Π²Π°ΠΌ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ ΡΠΈΠΊΠ»Π° ΡΡΠ°ΡΠ΅ΠΉ Π΄Π»Ρ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ ΠΊ Spring Professional Certification.
ΠΡΠΎ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΡΠ°ΡΡΠΈ, Π΅ΡΠ»ΠΈ ΠΎΠ½ Π·Π°ΠΉΠ΄Π΅Ρ Π°ΡΠ΄ΠΈΡΠΎΡΠΈΠΈ, Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΡ Π²ΡΠΏΡΡΠΊ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΎΠ².
ΠΠ½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ β ΡΡΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΏΠ°ΡΡΠ΅ΡΠ½, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΌΠ΅Π½ΡΡΠ°Π΅Ρ ΡΠ²ΡΠ·Ρ ΠΌΠ΅ΠΆΠ΄Ρ 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. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΈΠ· ΠΌΠ΅ΡΠ°ΡΠ°ΠΉΠ»ΠΎΠ².
ΠΡΡΡ 3 Π²Π°ΡΠΈΠ°Π½ΡΠ° Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ°ΠΊΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²:
ΠΠΈΠΆΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Ρ ΡΠΈΠΏΡ DI, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ Π² Π²Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ:
DI ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΡΡΠΈΡΠ°Π΅ΡΡΡ ΡΠ°ΠΌΡΠΌ Π»ΡΡΡΠΈΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ, Ρ.ΠΊ. Π΄Π»Ρ Π½Π΅Π³ΠΎ Π½Π΅ Π½Π°Π΄ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΡ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ½ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠ² DI ΡΠ΅ΡΠ΅Π· ΡΠ΅ΡΡΠ΅Ρ.
DI ΡΠ΅ΡΠ΅Π· ΠΏΠΎΠ»Π΅ Π½Π΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, Ρ.ΠΊ. Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΡ, ΡΠ½ΠΈΠΆΠ°ΡΡΠ°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ.
DI ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡ ΠΊ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠΌ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌ. Π§ΡΠΎΠ±Ρ ΡΡΠΎΠ³ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π»Π΅Π½ΠΈΠ²ΡΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π±ΠΈΠ½ΠΎΠ² ΠΈΠ»ΠΈ DI ΡΠ΅ΡΠ΅Π· ΡΠ΅ΡΡΠ΅Ρ.
ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ DI Ρ ΠΏΠΎΠΌΠΎΡΡΡ AutowiredAnnotationBeanPostProcessor. Π ΡΠ²ΡΠ·ΠΈ Ρ ΡΡΠΈΠΌ, Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π° Π½ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ BeanFactoryPP ΠΈΠ»ΠΈ BeanPP.
ΠΡΠ»ΠΈ Π²Π½Π΅Π΄ΡΡΠ΅ΠΌΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΌΠ°ΡΡΠΈΠ², ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ, ΠΈΠ»ΠΈ map Ρ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΎΠΌ, ΡΠΎ Spring Π²Π½Π΅Π΄ΡΠΈΡ Π²ΡΠ΅ Π±ΠΈΠ½Ρ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠ΅ ΠΏΠΎ ΡΠΈΠΏΡ Π² ΡΡΠΎΡ ΠΌΠ°ΡΡΠΈΠ²(ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΡΡ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ ). Π ΡΠ»ΡΡΠ°Π΅ Ρ map ΠΊΠ»ΡΡΠΎΠΌ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΡ Π±ΠΈΠ½Π°.
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°Π·Π½ΡΠ΅ ΡΠΈΠΏΡ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ:
Spring ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ Qualifier, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅ΠΎΠ΄ΠΎΠ»Π΅ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΈ DI.
ΠΡΠ»ΠΈ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅ Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±ΠΈΠ½ΠΎΠ² ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°(SomeClass), ΡΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π²Π½Π΅Π΄ΡΠΈΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠΎΡ Π±ΠΈΠ½, Π½Π°Π΄ @Bean-ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΡΠΎΠΈΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠ²Π°Π»ΠΈΡΠΈΠΊΠ°ΡΠΎΡ. Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΡΡΠ°Π²ΠΈΡΡ ΠΊΠ²Π°Π»ΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π½Π° ΠΌΠ΅ΡΠΎΠ΄, Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΠΌΡ Π±ΠΈΠ½Π° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΊΠ²Π°Π»ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°.
ΠΠΌΡ Π±ΠΈΠ½Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΡΠ΅ΡΠ΅Π· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ Bean, Π° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΡΠΎ ΠΈΠΌΡ ΡΠ°Π±ΡΠΈΡΠ½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°.
ΠΡΠΎΠΊΡΠΈ ΡΡΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠΌΠ΅Π΅Ρ ΡΠ°ΠΊΠΈΠ΅ ΠΆΠ΅ ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΊΠ°ΠΊ ΠΈ Π±ΠΈΠ½, Π½ΠΎ Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π΅ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ.
ΠΠ²Π° Π²ΠΈΠ΄Π° ΠΏΡΠΎΠΊΡΠΈ:
ΠΡΠ»ΠΈ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅ Π½Π΅Ρ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° Π±ΠΈΠ½Π°, ΡΠΎ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ @Bean-ΠΌΠ΅ΡΠΎΠ΄. ΠΡΠ»ΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Π±ΠΈΠ½Π° Π΅ΡΡΡ, ΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΡΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ Π±ΠΈΠ½.
Π ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π±ΡΠ΄Π΅Ρ Π²Π½Π΅Π΄ΡΠ΅Π½Π° ΡΡΡΠΎΠΊΠ°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ· property ΠΈΠ»ΠΈ ΠΈΠ· view.
ΠΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΠΎ, ΠΏΡΠΎΡΡΠ±Π° ΠΏΡΠΈΡΡΠ»Π°ΡΡ ΠΏΡΠ°Π²ΠΊΠΈ ΠΈΠ»ΠΈ Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ Π² Π»ΠΈΡΠΊΡ.
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Spring, ΠΈΠ»ΠΈ ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ, Π΅ΡΠ»ΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΡ ΠΏΡΠΎΠ΅ΠΊΡΡ @Autowired ΠΈ @Component, Π° Π²Ρ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΡΠ΅, ΡΡΠΎ ΡΡΠΎ
ΠΡΠΈΠ²Π΅ΡΡΡΠ²ΡΡ ΡΠ΅Π±Ρ, Π₯Π°Π±Ρ!
ΠΡΠ° ΡΡΠ°ΡΡΡ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»Π΅Π·Π½Π° ΡΠ΅ΠΌ, ΠΊΡΠΎ ΡΠΆΠ΅ Π½Π°ΡΠ°Π» ΠΈΠ·ΡΡΠ°ΡΡ Java ΠΈ Π΄Π°ΠΆΠ΅ ΡΡΠΏΠ΅Π» Π΄ΠΎΠ±ΠΈΡΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΡΠΏΠ΅Ρ ΠΎΠ² Π² ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠΈ Java Core, ΠΈ Π²ΠΎΡ ΡΡΠ»ΡΡΠ°Π» ΡΠ»ΠΎΠ²ΠΎ Spring. Π, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄Π°ΠΆΠ΅ Π½Π΅ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·: Π·Π½Π°Π½ΠΈΠ΅ Spring Framework, ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ, ΡΠΈΠ³ΡΡΠΈΡΡΠ΅Ρ Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° Π²Π°ΠΊΠ°Π½ΡΠΈΠΉ Π΄Π»Ρ Π΄ΠΆΠ°Π²ΠΈΡΡΠΎΠ². ΠΡΠ° ΡΡΠ°ΡΡΡ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π²Π°ΠΌ Π²Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Π½Π° ΡΠ°ΠΌΡΡ ΠΏΠ΅ΡΠ²ΡΡ ΡΡΡΠΏΠ΅Π½ΡΠΊΡ: ΠΏΠΎΠ½ΡΡΡ ΠΎΠ±ΡΡΡ ΠΈΠ΄Π΅Ρ ΡΡΠΎΠ»Ρ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΠ³ΠΎ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ°.
ΠΠ°ΡΠ½Π΅ΠΌ ΠΈΠ·Π΄Π°Π»Π΅ΠΊΠ°. Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠ°ΠΊΠΎΠ΅ ΠΏΠΎΠ½ΡΡΠΈΠ΅ ΠΊΠ°ΠΊ Inversion of Control, ΠΏΠΎ-ΡΡΡΡΠΊΠΈ β ΠΠ½Π²Π΅ΡΡΠΈΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ, ΡΠΎΠΊΡΠ°ΡΠ΅Π½Π½ΠΎ β IoC. IoC β ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΡΠΈΠ½ΡΠΈΠΏΠΎΠ², ΠΏΡΠΈΠ±Π»ΠΈΠΆΠ°ΡΡΠΈΠΉ Π½Π°Ρ ΠΊΠΎΠ΄ ΠΊ ΡΠ»Π°Π±ΠΎΡΠ²ΡΠ·Π°Π½Π½ΠΎΡΡΠΈ. IoC β ΡΡΠΎ Π΄Π΅Π»Π΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΡΡΠΈ Π½Π°ΡΠΈΡ ΠΎΠ±ΡΠ·Π°Π½Π½ΠΎΡΡΠ΅ΠΉ Π²Π½Π΅ΡΠ½Π΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ.
Π‘ΡΡΠ΅ΡΡΠ²ΡΡΡ ΡΠ°Π·Π½ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ IoC ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°, Π½Π°Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ΅Ρ ΠΎΠ΄Π½Π° ΠΈΠ· Π½ΠΈΡ β Dependency Injection, Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ. Π§ΡΠΎ ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅, Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π³ΠΎΠ²ΠΎΡΠΈΡ ΡΠ°ΠΌΠΎ Π·Π° ΡΠ΅Π±Ρ, ΡΠ°ΠΊ ΡΡΠΎ ΡΠ°ΡΠΊΡΡΡΡ Π΅Π΅ Ρ ΠΏΠΎΡΡΠ°ΡΠ°ΡΡΡ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅. ΠΡ ΠΏΠΈΡΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΡΡΡΠ΅Π΅ ΡΠ°Π±ΠΎΡΡ ΡΠ΅ΡΠΈ ΠΌΠ°Π³Π°Π·ΠΈΠ½ΠΎΠ². ΠΡΡΡ ΠΊΠ»Π°ΡΡΡ Shop (ΠΌΠ°Π³Π°Π·ΠΈΠ½) ΠΈ Seller (ΠΏΡΠΎΠ΄Π°Π²Π΅Ρ). Π£ ΠΊΠ»Π°ΡΡΠ° Seller ΠΈΠΌΠ΅Π΅ΡΡΡ ΠΏΠΎΠ»Π΅ ΡΠΈΠΏΠ° Shop β ΠΌΠ°Π³Π°Π·ΠΈΠ½, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΡΠΎΠ΄Π°Π²Π΅Ρ. ΠΠΎΡ ΠΌΡ ΠΈ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΠΈΡΡ Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΡ: Seller Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Shop. Π’Π΅ΠΏΠ΅ΡΡ Π·Π°Π΄ΡΠΌΠ°Π΅ΠΌΡΡ, ΠΊΠ°ΠΊ Π² ΠΎΠ±ΡΠ΅ΠΊΡ Seller ΠΏΠΎΠΏΠ°Π΄Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ Shop? ΠΡΡΡ Π²Π°ΡΠΈΠ°Π½ΡΡ:
ΠΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ Π΄Π²Π° ΡΠΏΠΎΡΠΎΠ±Π° β ΡΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Dependency Injection (Π½ΠΎ ΠΏΠΎΠΊΠ° Π΅ΡΠ΅ ΡΡΠΎ Π½Π΅ IoC). Π, Π½Π°ΠΊΠΎΠ½Π΅Ρ, ΠΌΡ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ°Π»ΠΈΡΡ ΠΊ ΡΠΏΡΠΈΠ½Π³Ρ: ΠΎΠ½ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΠΏΠΎΡΠΎΠ± Π²Π½Π΅Π΄ΡΡΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ (Π° ΡΡΡ ΡΠΆΠ΅ IoC).
ΠΠΎΠΎΠ±ΡΠ΅ Π³ΠΎΠ²ΠΎΡΡ, Spring β ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΡΠΈΡΠΎΠΊΠΈΠΉ Π½Π°Π±ΠΎΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Π½Π° ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΠ»ΡΡΠ°ΠΈ ΠΆΠΈΠ·Π½ΠΈ. Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΈ Spring MVC Π΄Π»Ρ Π±ΡΡΡΡΠΎΠ³ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΈ Spring Security Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, ΠΈ Spring Data Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ ΠΈ Π΅ΡΠ΅ ΠΊΡΡΠ° Π²ΡΠ΅Π³ΠΎ. ΠΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ ΡΡΠΎΠΈΡ Spring IoC β ΡΡΠΎ Π±Π°Π·ΠΎΠ²ΡΠΉ Π²ΠΈΠ΄ ΡΠΏΡΠΈΠ½Π³Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΈΠ·ΡΡΠ°Π΅ΠΌΡΡ Π½Π°ΠΌΠΈ ΡΠ΅ΠΌΡ β Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ. Spring IoC Π·Π°ΡΠ»ΡΠΆΠΈΠ²Π°Π΅Ρ Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ Π² ΡΠ°ΠΌΠΎΠΌ Π½Π°ΡΠ°Π»Π΅ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΡΠΏΡΠΈΠ½Π³Π° ΠΏΠΎ Π΅ΡΠ΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΠΈΡΠΈΠ½Π΅. ΠΠ°ΠΊ Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ Π²ΠΈΠ΄Π°ΠΌΠΈ ΡΠΏΡΠΈΠ½Π³Π°, Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ ΡΠΏΡΠΈΠ½Π³ΠΎΠ² Spring IoC ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΠΊΠ°ΡΠΊΠ°Ρ.
ΠΠ½Π°ΠΊΠΎΠΌΡΡΠ²ΠΎ ΡΠΎ Spring IoC Π½Π°ΡΠ½Π΅ΠΌ Ρ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΠΌΠΈΠ½Π°: Π±ΠΈΠ½ (Π°Π½Π³Π». β bean). Π‘Π°ΠΌΡΠΌΠΈ ΠΏΡΠΎΡΡΡΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ,
ΠΠΈΠ½ β ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡΠΉ Spring-ΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π²Π½Π΅Π΄ΡΠΈΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»Ρ Π² Π΄ΡΡΠ³ΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ.
ΠΠΈΠ½ β ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ°, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΡΠΎΠ±ΠΎΠΉ Π·Π°Π²Π΅ΡΡΠ΅Π½Π½ΡΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π±ΠΈΠ·Π½Π΅Ρ-ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ Π»ΠΈΠ±ΠΎ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ Spring’Π°, ΠΆΠΈΠ·Π½Π΅Π½Π½ΡΠΌ ΡΠΈΠΊΠ»ΠΎΠΌ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π±ΠΈΠ½ΠΎΠ².
ΠΠ°ΠΊ Π²Ρ ΡΠΆΠ΅ ΠΏΠΎΠ½ΡΠ»ΠΈ, Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π² Seller ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π²Π½Π΅Π΄ΡΠΈΡΡ Shop, Shop Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡΠ°ΡΡ Π±ΠΈΠ½ΠΎΠΌ. Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΈΠΌΠ΅ΡΡ Π³ΠΎΡΠ΄ΠΎΠ΅ ΠΏΡΠ°Π²ΠΎ Π½Π°Π·ΡΠ²Π°ΡΡΡΡ Π±ΠΈΠ½Π°ΠΌΠΈ, Π²ΡΠ΅ ΠΎΠ½ΠΈ ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡ Π½Π°Ρ ΠΊ ΠΏΠΎΠ½ΡΡΠΈΡ ApplicationContext. ApplicationContext β ΡΡΠΎ ΡΠ΅ΡΠ΄ΡΠ΅ ΡΠΏΡΠΈΠ½Π³Π°. ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΠΎΠ½ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π² ΡΠ°ΠΌΠΎΠΌ Π½Π°ΡΠ°Π»Π΅ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (Β«ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅ΡΡΡΒ») ΠΈ ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΆΠΈΠ·Π½Π΅Π½Π½ΡΠΌ ΡΠΈΠΊΠ»ΠΎΠΌ Π±ΠΈΠ½ΠΎΠ². ΠΠΎΡΡΠΎΠΌΡ Π΅Π³ΠΎ Π΅ΡΠ΅ Π½Π°Π·ΡΠ²Π°ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠΌ Π±ΠΈΠ½ΠΎΠ².
ΠΠΎΠ΄Π±ΠΈΡΠ°Π΅ΠΌΡΡ ΠΊ Π³Π»Π°Π²Π½ΠΎΠΌΡ. ΠΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ Π½Π°ΡΠΈ ΠΊΠ»Π°ΡΡΡ, ΡΡΠΎΠ±Ρ Spring IoC ΠΈ Π΅Π³ΠΎ ΡΠ»ΡΠ³Π° ApplicationContext ΠΏΠΎΠ΄ΡΡΠ°Π²ΠΈΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Ρ Shop ΠΎΠ±ΡΠ΅ΠΊΡΡ Seller? ΠΠΎΡ ΡΠ°ΠΊΠΈΠΌ:
ΠΡΠΎΡΡΠΎ? ΠΡΠ΄Π° ΡΠΆ ΠΏΡΠΎΡΠ΅! ΠΠ»Π΅Π³Π°Π½ΡΠ½ΠΎ? ΠΠΏΠΎΠ»Π½Π΅. ΠΠ΄Π΅ΡΡ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅: Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ Component ΡΠΊΠ°Π·Π°Π»Π° ΡΠΏΡΠΈΠ½Π³Ρ, ΡΡΠΎ ΠΊΠ»Π°ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π΅ΠΉ Π°Π½Π½ΠΎΡΠΈΡΡΠ΅ΠΌ, ΡΡΠΎ Π±ΠΈΠ½. ΠΠ½Π½ΠΎΡΠ°ΡΠΈΡ Autowired ΠΏΠΎΠΏΡΠΎΡΠΈΠ»Π° Spring Π² ΠΏΠΎΠ»Π΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΎΠ½Π° Π°Π½Π½ΠΎΡΠΈΡΡΠ΅Ρ, ΠΏΠΎΠ΄ΡΡΠ°Π²ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Β«ΠΈΠ½ΠΆΠ΅ΠΊΡΠ½ΡΡΡΒ» (inject). ΠΠ°ΠΊΠΎΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ΄ΡΡΠ°Π²Π»Π΅Π½ΠΎ? ΠΠ± ΡΡΠΎΠΌ ΡΡΡΡ ΠΏΠΎΠ·ΠΆΠ΅, ΡΠ½Π°ΡΠ°Π»Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌΡΡ, ΠΊΠ°ΠΊ Π²ΠΎΠΎΠ±ΡΠ΅ ΠΊΠ»Π°ΡΡΡ ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ Π±ΠΈΠ½Π°ΠΌΠΈ.
ΠΡ ΡΠΆΠ΅ Π·Π½Π°Π΅ΠΌ, ΡΡΠΎ Π² Π½Π°ΡΠ°Π»Π΅ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ΄Π½ΡΡΡΡΡ Ρ ΡΠ°Π½ΠΈΡΠ΅Π»Ρ Π²ΡΠ΅Ρ Π±ΠΈΠ½ΠΎΠ² ApplicationContext. ΠΠ½-ΡΠΎ ΠΈ ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΡΠ°Π·Ρ Π²ΡΠ΅ Π±ΠΈΠ½Ρ. ΠΠΎΡΡΠΈ Π²ΡΠ΅. ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π»ΡΠ±ΠΎΠΉ Π±ΠΈΠ½ ΠΈΠΌΠ΅Π΅Ρ Π²Π½ΡΡΡΠΈΡΠΏΡΠΈΠ½Π³ΠΎΠ²ΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ scope Π² Π·Π½Π°ΡΠ΅Π½ΠΈΠΈ singleton. ΠΠ½ΡΡΡΠΈΡΠΏΡΠΈΠ½Π³ΠΎΠ²ΠΎΠ΅, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠΈΠ½Π³Π»ΡΠΎΠ½ΠΎΠΌ Π² ΠΏΡΡΠΌΠΎΠΌ ΡΠΌΡΡΠ»Π΅ ΡΠ»ΠΎΠ²Π° ΠΎΠ½ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ. ΠΠ½ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΈΠ½Π³Π»ΡΠΎΠ½ΠΎΠΌ Π΄Π»Ρ ΡΠΏΡΠΈΠ½Π³Π°: ΠΏΡΠΈ ΠΏΠΎΠ΄Π½ΡΡΠΈΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Spring ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΎΠ²Π½ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡΠ΅ΠΊΡ-Π±ΠΈΠ½ ΠΈΠ· ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°. ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠ°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ β ΠΏΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, Spring ΡΠ°Π·ΡΠ΅ΡΠ°Π΅Ρ ΡΠΏΡΠ°Π²Π»ΡΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π±ΠΈΠ½Π° ΠΈ ΠΈΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, Π½ΠΎ ΡΠ΅ΠΉΡΠ°Ρ Π½Π΅ ΠΎΠ± ΡΡΠΎΠΌ.
ΠΡΠ°ΠΊ, ΠΏΡΠΈ ΠΏΠΎΠ΄Π½ΡΡΠΈΠΈ ApplicationContext ΡΠΎΠ·Π΄Π°ΡΡΡΡ Π²ΡΠ΅ Π±ΠΈΠ½Ρ. ΠΠ°Π²Π°ΠΉΡΠ΅ Π²ΡΡΡΠ½ΠΈΠΌ, Π° ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ Π³Π΄Π΅ ΠΆΠΈΠ²Π΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΈ ΡΠ°ΠΌΠΎΠ΅ Π³Π»Π°Π²Π½ΠΎΠ΅: ΠΊΠ°ΠΊ ΠΎΠ½ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΠΈΠ· ΠΊΠ°ΠΊΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π±ΠΈΠ½Ρ. ΠΠ°ΡΠΈΠ°Π½ΡΠΎΠ² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ, Π΄Π»Ρ ΠΏΡΠΎΡΡΠΎΡΡ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΌΡ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΏΡΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ : ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ°ΠΉΠ»Π° xml. ΠΠΎΡ Π΅Π³ΠΎ ΠΏΡΠΈΠΌΠ΅Ρ:
Π ΡΡΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°Π½ Π·Π°ΠΏΡΡΠΊ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π±ΠΈΠ½ΠΎΠ² Π΄Π²ΡΠΌΡ ΠΏΡΡΡΠΌΠΈ. ΠΠ΅ΡΠ²ΡΠΉ, ΡΠΊΠ°ΠΆΠ΅ΠΌ ΡΠ°ΠΊ, ΡΡΡΠ½ΠΎΠΉ. ΠΠΈΠ΄ΠΈΡΠ΅, Π·Π΄Π΅ΡΡ Π΅ΡΡΡ ΡΠ΅Π³ bean Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΊΠ»Π°ΡΡΠ°. ΠΡΠΎ ΠΈ Π΅ΡΡΡ Π±ΠΈΠ½. ΠΠ· Π²ΡΠ΅Π³ΠΎ, ΡΡΠΎ ΠΏΡΠΎΠΏΠΈΡΠ°Π½ΠΎ Π² ΡΡΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ Ρ ΡΠ΅Π³ΠΎΠΌ bean, Π±ΡΠ΄ΡΡ ΡΠΎΠ·Π΄Π°Π½Ρ Π±ΠΈΠ½Ρ.
ΠΡΠΎΡΠΎΠΉ ΠΏΡΡΡ ΠΌΠ΅Π½Π΅Π΅ ΠΌΠ½ΠΎΠ³ΠΎΡΠ»ΠΎΠ²Π΅Π½. ΠΠΎΠΌΠ½ΠΈΡΠ΅, Π½Π°Π΄ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ ΠΌΡ ΠΏΠΎΡΡΠ°Π²ΠΈΠ»ΠΈ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ Component. ΠΠ· Π²ΡΠ΅Ρ ΠΊΠ»Π°ΡΡΠΎΠ², Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΡΠΎΠΉ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠ΅ΠΉ, Π±ΡΠ΄ΡΡ ΡΠΎΠ·Π΄Π°Π½Ρ Π±ΠΈΠ½Ρ. ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΡΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ ΠΈΠ· xml-ΡΠ°ΠΉΠ»Π°:
ΠΠ½Π° Π³ΠΎΠ²ΠΎΡΠΈΡ ΡΠΏΡΠΈΠ½Π³Ρ: ΠΏΡΠΎΡΠΊΠ°Π½ΠΈΡΡΠΉ Π²Π΅ΡΡ ΠΏΠ°ΠΊΠ΅Ρ main ΠΈ ΠΈΠ· Π²ΡΠ΅Π³ΠΎ, Π½Π°Π΄ ΡΠ΅ΠΌ Π±ΡΠ΄Π΅Ρ ΡΡΠΎΡΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ Component (ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ, ΡΠ²Π»ΡΡΡΠΈΠ΅ΡΡ Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠ°ΠΌΠΈ Component), ΡΠΎΠ·Π΄Π°ΠΉ Π±ΠΈΠ½Ρ. ΠΠΎΠΌΠΏΠ°ΠΊΡΠ½ΠΎ, Π½Π΅ ΠΏΡΠ°Π²Π΄Π° Π»ΠΈ? ΠΡΠΎΡΡΠΎ Π³ΠΎΠ²ΠΎΡΠΈΠΌ, Π² ΠΊΠ°ΠΊΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠ°Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ ΠΊΠ»Π°ΡΡΡ, ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π±ΠΈΠ½Ρ, ΠΈ Π°Π½Π½ΠΎΡΠΈΡΡΠ΅ΠΌ ΡΡΠΈ ΠΊΠ»Π°ΡΡΡ.
ΠΠΎΠ΄Π½ΡΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ xml-ΡΠ°ΠΉΠ»Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΡΠΎΡΠΊΠΎΠΉ ΠΊΠΎΠ΄Π°:
Π³Π΄Π΅ beans.xml β ΠΏΡΡΡ ΠΊ xml-Π½ΠΈΠΊΡ, ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠ»Π° ΡΠ΅ΡΡ Π²ΡΡΠ΅.
Π‘ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ΠΌ Π±ΠΈΠ½ΠΎΠ² ΡΠ°Π·ΠΎΠ±ΡΠ°Π»ΠΈΡΡ. ΠΠ°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Spring Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ ΠΏΠΎΠ»Π΅ Shop ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ SellerβΠ°? ΠΡΠΈ ΠΏΠΎΠ΄Π½ΡΡΠΈΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π±ΠΈΠ½-ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ° Shop. Π’Π°ΠΊΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π±ΠΈΠ½-ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ° Seller, ΠΎΠ½ ΠΆΠ΅ ΡΠΎΠΆΠ΅ Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½ Component. Π£ Π½Π΅Π³ΠΎ Π΅ΡΡΡ ΠΏΠΎΠ»Π΅ ΡΠΈΠΏΠ° Shop, Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ Autowired. ΠΠ½Π½ΠΎΡΠ°ΡΠΈΡ Autowired Π³ΠΎΠ²ΠΎΡΠΈΡ ΡΠΏΡΠΈΠ½Π³Ρ: Π² ΡΡΠΎ ΠΏΠΎΠ»Π΅ Π½ΡΠΆΠ½ΠΎ ΠΈΠ½ΠΆΠ΅ΠΊΡΠ½ΡΡΡ Π±ΠΈΠ½. Π Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Ρ Π½Π°Ρ Π΅ΡΡΡ Π²ΡΠ΅Π³ΠΎ ΠΎΠ΄ΠΈΠ½ Π±ΠΈΠ½, ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΉ Π½Π° ΡΡΡ ΡΠΎΠ»Ρ, ΡΠΎ Π΅ΡΡΡ ΡΠΈΠΏ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ ΡΠΈΠΏΠΎΠΌ ΠΏΠΎΠ»Ρ: ΡΡΠΎ Π±ΠΈΠ½ β ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° Shop. ΠΠ½ ΠΈ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΈΠ½ΠΆΠ΅ΠΊΡΠ΅Π½ Π² ΠΎΠ±ΡΠ΅ΠΊΡ Seller, ΡΡΠΎ ΠΈ ΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎΡΡ. Π― ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ, ΡΠ΅ΠΉΡΠ°Ρ Π²ΠΎΠΏΡΠΎΡΠΈΠΊΠΈ ΠΏΠΎΠ»Π΅Π·Π»ΠΈ ΠΊΠ°ΠΊ ΡΠ΅ΡΠ²ΡΡΠΊΠΈ: Π° ΡΡΠΎ Π±ΡΠ΄Π΅Ρ, Π΅ΡΠ»ΠΈ Spring Π½Π΅ Π½Π°ΠΉΠ΄Π΅Ρ Π½ΡΠΆΠ½ΡΠΉ Π±ΠΈΠ½, ΠΈΠ»ΠΈ Π½Π°ΠΉΠ΄Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΡ (ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΡΡΠΈΡΡΠ²Π°Ρ, ΡΡΠΎ ΠΈΠ½ΠΆΠ΅ΠΊΡΠΈΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ, Π° Π½Π΅ ΠΏΠΎ ΠΊΠ»Π°ΡΡΡ). Spring ΡΠΌΠ΅Π½, Π½ΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΈ ΠΎΡ Π½Π°Ρ. ΠΠ°ΠΌ Π½ΡΠΆΠ½ΠΎ Π»ΠΈΠ±ΠΎ ΠΈΠΌΠ΅ΡΡ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ ΡΠΎΠ²Π½ΠΎ ΠΎΠ΄ΠΈΠ½ Π±ΠΈΠ½, ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΉ ΠΏΠΎΠ΄ ΠΊΠ°ΠΆΠ΄ΡΠΉ Autowired, Π»ΠΈΠ±ΠΎ ΠΎΠ±ΡΡΠ°ΡΡ Spring Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠΌ ΠΏΡΠΈ ΡΠ°ΠΊΠΈΡ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠ°Ρ (ΠΎΠ± ΡΡΠΎΠΌ ΠΌΡ ΡΠ΅ΠΉΡΠ°Ρ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ, Π²Ρ ΠΈ ΡΠ°ΠΊ ΡΡΡΠ°Π»ΠΈ, ΠΊΡΠ΅ΠΏΠΈΡΠ΅ΡΡ, ΡΡΠ°ΡΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ ΠΊ ΠΊΠΎΠ½ΡΡ).
ΠΠ°ΠΌΠ΅ΡΡΡΠ΅, ΡΡΠΎ Seller β ΡΡΠΎ ΡΠΎΠΆΠ΅ Π±ΠΈΠ½. ΠΡΠ»ΠΈ Π±Ρ ΠΎΠ½ Π±ΡΠ» Π½Π΅ Π±ΠΈΠ½ΠΎΠΌ, Π° ΡΠΎΠ·Π΄Π°Π²Π°Π»ΡΡ ΡΠ΅ΡΠ΅Π· new, ΡΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π±Ρ Π½ΠΈΡΠ΅Π³ΠΎ Π² Π½Π΅Π³ΠΎ Π½Π΅ ΠΏΡΠΎΠΈΠ½ΠΆΠ΅ΠΊΡΠ½ΡΠ»ΠΎΡΡ.
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ ΡΠ΅ΠΉΡΠ°Ρ Π΄ΡΠΌΠ°Π΅ΡΠ΅, Π·Π°ΡΠ΅ΠΌ Π²ΡΠ΅ ΡΡΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ. ΠΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΡΠ΅, ΡΡΠΎ Ρ Π½Π°Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΈΠ· 2 ΠΊΠ»Π°ΡΡΠΎΠ², Π° Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠ² Π±ΠΎΠ»ΡΡΠ΅ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ ΡΠΆΠ΅ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π½Π΅ ΡΠ°ΠΌΠΎΠΉ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅ΠΉ.
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ ΡΠ΅ΠΉΡΠ°Ρ Π΄ΡΠΌΠ°Π΅ΡΠ΅, ΠΊΠ°ΠΊ ΠΊΡΠ°ΡΠΈΠ²ΠΎ, ΠΏΡΠΎΡΡΠΎ ΠΈ Π»Π°ΠΊΠΎΠ½ΠΈΡΠ½ΠΎ Spring ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²Π½Π΅Π΄ΡΡΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ. ΠΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΡΠ΅, ΡΡΠΎ ΡΡΠΎ-ΡΠΎ ΠΏΠΎΡΠ»ΠΎ Π½Π΅ ΡΠ°ΠΊ ΠΈ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π΅Π±Π°ΠΆΠΈΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π Π²ΡΠ΅ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΡΠΆΠ΅ Π½Π΅ ΡΠ°ΠΊ ΠΏΡΠΎΡΡΠΎβ¦
ΠΠ°ΡΠΎΡΠΊΠ° Ρ ΠΈΠ½ΡΠΎΠ² Π½Π°ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠΊ:
ΠΡΠΎ Π»Π΅Π³Π°Π»ΡΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΠΎΠ»ΡΡΠΈΡΡ Π±ΠΈΠ½, Ρ ΠΎΡΡ Π² ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠ΅Π°Π»ΠΈΡΡ ΡΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΠΎ Π½Π΅ Π΄Π΅Π»Π°ΡΡ. ΠΠΎ Π΄Π»Ρ ΡΡΠ΅Π±Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΌΠΎΠΆΠ½ΠΎ.
UPD (20.04.2021). Dependency Injection ΡΡΠΎ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° IoC! Π ΡΠ°ΠΌΠΎΠΌ Π½Π°ΡΠ°Π»Π΅ Ρ ΠΊΠ°ΠΊ ΡΠ°Π· ΠΏΡΠΈΠ²ΠΎΠΆΡ ΠΏΡΠΈΠΌΠ΅ΡΡ Dependency Injection, Π½Π΅ ΡΠ²Π»ΡΡΡΠΈΠ΅ΡΡ IoC.