public @interface Autowired - 201211211yj/Spring-Boot-Start GitHub Wiki
public @interface Autowired
Autowired Constructors
์ง์ ๋ Bean ํด๋์ค์ ์์ฑ์ ์ค ํ๋๋ง required () ์์ฑ์ true๋ก ์ค์ ํ์ฌ ์ด ์ฃผ์์ ์ ์ธ ํ ์ ์์ผ๋ฉฐ ์ด๋ Spring Bean์ผ๋ก ์ฌ์ฉ๋ ๋ Autowiring๋๋๋ก ์์ฑ์๋ฅผ ๋ํ๋
๋๋ค. ๋ํ required ์์ฑ์ด true๋ก ์ค์ ๋๋ฉด ๋จ์ผ ์์ฑ์์๋ง @Autowired๋ก ์ฃผ์์ด ๋ฌ๋ฆด ์ ์์ต๋๋ค. ํ์ํ์ง ์์ ์ฌ๋ฌ ์์ฑ์๊ฐ ์ฃผ์์ ์ ์ธํ๋ฉด Autowire์ ํ๋ณด๋ก ๊ฐ์ฃผ๋ฉ๋๋ค. Spring ์ปจํ
์ด๋์์ Bean์ ์ผ์น์์ผ ์ถฉ์กฑ์ํฌ ์์๋ ๊ฐ์ฅ ๋ง์ ์ข
์์ฑ์ ๊ฐ์ง ์์ฑ์๊ฐ ์ ํ๋ฉ๋๋ค. **๋ง์กฑํ ์์๋ ํ๋ณด๊ฐ ์์ผ๋ฉด ๊ธฐ๋ณธ / ๊ธฐ๋ณธ ์์ฑ์ (์๋ ๊ฒฝ์ฐ)**๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ํด๋์ค๊ฐ ์ฌ๋ฌ ์์ฑ์๋ฅผ ์ ์ธํ์ง๋ง @Autowired๋ก ์ฃผ์์ด์๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ / ๊ธฐ๋ณธ ์์ฑ์ (์๋ ๊ฒฝ์ฐ)๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. ํด๋์ค๊ฐ ๋จ์ผ ์์ฑ์๋ฅผ ์์์ผ๋ก ์ ์ธํ๋ ๊ฒฝ์ฐ ์ฃผ์์ ๋ฌ์ง ์์๋ ํญ์ ์ฌ์ฉ๋ฉ๋๋ค. ์ฃผ์์ด ๋ฌ๋ฆฐ ์์ฑ์๋ public์ผ ํ์๋ ์์ต๋๋ค.
Autowired Fields
๊ตฌ์ฑ ๋ฉ์๋๊ฐ ํธ์ถ๋๊ธฐ ์ ์ Bean์ ์์ฑ ํ ์งํ์ ํ๋๊ฐ ์ฃผ์
๋ฉ๋๋ค. ์ด๋ฌํ ๊ตฌ์ฑ ํ๋๋ public์ผ ํ์๋ ์์ต๋๋ค.
Autowired Methods
๊ตฌ์ฑ ๋ฉ์๋๋ ์์์ ์ด๋ฆ๊ณผ ์ฌ๋ฌ ๊ฐ์ ์ธ์๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค. ์ด๋ฌํ ๊ฐ ์ธ์๋ Spring ์ปจํ
์ด๋์์ ์ผ์นํ๋ Bean์ผ๋ก ์๋ ์ฐ๊ฒฐ๋ฉ๋๋ค. Bean Property Setter ๋ฉ์๋๋ ์ฌ์ค์ ์ผ๋ฐ์ ์ธ config ๋ฉ์๋์ ํน๋ณํ ๊ฒฝ์ฐ์
๋๋ค. ์ด๋ฌํ ๊ตฌ์ฑ ๋ฐฉ๋ฒ์ public์ผ ํ์๋ ์์ต๋๋ค.
Autowired Parameters
@Autowired๋ Spring Framework 5.0 ์ดํ ๊ฐ๋ณ ๋ฉ์๋ ๋๋ ์์ฑ์ ๋งค๊ฐ ๋ณ์์ ๊ธฐ์ ์ ์ผ๋ก ์ ์ธ ๋ ์ ์์ง๋ง ํ๋ ์ ์ํฌ์ ๋๋ถ๋ถ์ ์ด๋ฌํ ์ ์ธ์ ๋ฌด์ํฉ๋๋ค. Autowiring๋๋ ๋งค๊ฐ ๋ณ์๋ฅผ ์ ๊ทน์ ์ผ๋ก ์ง์ํ๋ ํต์ฌ Spring Framework์ ์ ์ผํ ๋ถ๋ถ์ spring-test ๋ชจ๋์ JUnit Jupiter ์ง์์
๋๋ค (์์ธํ ๋ด์ฉ์ TestContext ํ๋ ์ ์ํฌ ์ฐธ์กฐ ๋ฌธ์ ์ฐธ์กฐ).
Multiple Arguments and 'required' Semantics
๋ค์ค ์ธ์ ์์ฑ์ ๋๋ ๋ฉ์๋์ ๊ฒฝ์ฐ required () ์์ฑ์ด ๋ชจ๋ ์ธ์์ ์ ์ฉ ๊ฐ๋ฅํฉ๋๋ค. ๊ฐ๋ณ ๋งค๊ฐ ๋ณ์๋ Java-8 ์คํ์ผ ์ ํ ์ฌํญ์ผ๋ก ์ ์ธ ๋ ์ ์์ผ๋ฉฐ, Spring Framework 5.0์์ Kotlin์ @Nullable ๋๋ null์ด ์๋ ๋งค๊ฐ ๋ณ์ ์ ํ์ผ๋ก ์ ์ธ๋์ด 'required'๋ฅผ ๋์ฒดํฉ๋๋ค.
Autowiring Arrays, Collections, and Maps
Array, Collection ๋๋ Map์ด ์ข
์๋ ์ ํ์ ๊ฒฝ์ฐ ์ปจํ
์ด๋๋ ์ ์ธ ๋ ๊ฐ ์ ํ๊ณผ ์ผ์นํ๋ ๋ชจ๋ Bean์ ์๋ ์ฐ๊ฒฐํฉ๋๋ค. ์ด๋ฌํ ๋ชฉ์ ์ผ๋ก Map์ Key๋ String ์ ํ์ผ๋ก ์ ์ธ๋์ด์ผํ๋ฉฐ ํด๋น Bean์ ์ด๋ฆ์ผ๋ก ํด์๋ฉ๋๋ค. ์ด๋ฌํ ์ปจํ
์ด๋๋ก ์ ๊ณต๋ ์ปฌ๋ ์
์ ๋์ ๊ตฌ์ฑ ์์์ Ordered ๋ฐ **@Order **๊ฐ์ ๊ณ ๋ คํ์ฌ ๋ฐ๋ฅด๋ฉฐ, ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ์ปจํ
์ด๋์ ๋ฑ๋ก ๋ ์์๋ฅผ ๋ฐ๋ฆ
๋๋ค. ๋๋ ๋จ์ผ ์ผ์น ๋์ Bean์ด ์ผ๋ฐ์ ์ผ๋ก ์ ํ์ด ์ง์ ๋ ์ฝ๋ ์
๋๋ ๋งต ์์ฒด ์ผ ์๋ ์์ต๋๋ค.
-
public interface Ordered
Ordered๋ Collection๊ณผ ๊ฐ์ด ์์๋ฅผ ์ ํด์ผํ๋ ๊ฐ์ฒด๋ก ๊ตฌํํ ์์๋ ์ธํฐํ์ด์ค์ ๋๋ค.
์ค์ ์์๋ ์ฐ์ ์์๊ฐ ๋์ ๊ฒ์ผ๋ก ํด์ ๋ ์ ์์ผ๋ฉฐ, ๊ฐ์ฅ ๋ฎ์ ์ฐ์ ์์ ๊ฐ์ ๊ฐ์ง ์ฒซ ๋ฒ์งธ ์ค๋ธ์ ํธ๊ฐ ๊ฐ์ฅ ๋์ ์ฐ์ ์์๋ฅผ ๊ฐ์ต๋๋ค.
์ด ์ธํฐํ์ด์ค์๋ PriorityOrdered์ ์ฐ์ ์์ ํ์๋ ์์ต๋๋ค. PriorityOrdered ๊ฐ์ฒด๊ฐ ์ผ๋ฐ ์์ํ ๊ฐ์ฒด๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ๋๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ Javadoc for PriorityOrdered๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
์ ๋ ฌ๋์ง ์์ ๊ฐ์ฒด์ ์ ๋ ฌ ์๋ฏธ์ ๋ํ ์์ธํ ๋ด์ฉ์ Javadoc for OrderComparator๋ฅผ ์ฐธ์กฐํ์ญ์์ค. -
public @interface Order
value ()๋ ์ ํ ์ฌํญ์ด๋ฉฐ Ordered ์ธํฐํ์ด์ค์ ์ ์ ๋ ์์ ๊ฐ์ ๋ํ๋ ๋๋ค. ๊ฐ์ด ๋ฎ์์๋ก ์ฐ์ ์์๊ฐ ๋์ต๋๋ค. ๊ธฐ๋ณธ๊ฐ์ Ordered.LOWEST_PRECEDENCE์ด๋ฉฐ, ๊ฐ์ฅ ๋ฎ์ ์ฐ์ ์์๋ฅผ ๋ํ๋ ๋๋ค (์ง์ ๋ ๋ค๋ฅธ ์์ ๊ฐ์ผ๋ก).
์ฐธ๊ณ : Spring 4.0๋ถํฐ, ์ด๋ ธํ ์ด์ ๊ธฐ๋ฐ ์์๋ ๋์ ์ปดํฌ๋ํธ์ ์์ ๊ฐ์ด ๊ณ ๋ ค๋๋ ์ฝ๋ ์ ์ฃผ์ (๋์ ํด๋์ค ๋๋ @Bean ๋ฉ์๋)์์ ์คํ๋ง์ ๋ง์ ์ปดํฌ๋ํธ์ ๋ํด ์ง์๋ฉ๋๋ค. ์ด๋ฌํ ์์ ๊ฐ์ ์ฃผ์ ์ง์ ์ ์ฐ์ ์์์ ์ํฅ์ ์ค ์ ์์ง๋ง ์ข ์์ฑ ๊ด๊ณ ๋ฐ @DependsOn ์ ์ธ (๋ฐํ์ ๊ฒฐ์ ์ข ์์ฑ ๊ทธ๋ํ์ ์ํฅ์ ๋ฏธ์นจ)์ ์ํด ๊ฒฐ์ ๋๋ ์ง๊ต ๋ฌธ์ ์ธ ๋จ์ผ ์์ ์์์๋ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค.
Spring 4.1๋ถํฐ ํ์ค์ Priority์ด๋ ธํ ์ด์ ์ ์ฃผ๋ฌธ ์๋๋ฆฌ์ค์์ ์ด ์ด๋ ธํ ์ด์ ์ drop-in์ ๋์ฒด๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋จ์ผ ์์๋ฅผ ์ ํํด์ผํ๋ ๊ฒฝ์ฐ @Priority์ ์ถ๊ฐ ์๋งจํฑ์ด์์ ์ ์์ต๋๋ค (AnnotationAwareOrderComparator.getPriority (java.lang.Object) ์ฐธ์กฐ).
๋์์ผ๋ก, ์์ ๊ฐ์ Ordered ์ธํฐํ์ด์ค๋ฅผ ํตํด ์ธ์คํด์ค๋ณ๋ก ๊ฒฐ์ ๋ ์ ์์ผ๋ฉฐ, ํน์ ํด๋์ค์ ๋ถ์ฐฉ ๋ ํ๋ ์ฝ๋ฉ ๋ ๊ฐ ๋์ configuration์ผ๋ก ๊ฒฐ์ ๋ ์ธ์คํด์ค ๊ฐ์ ํ์ฉํฉ๋๋ค.
๋น ์์ฐจ์ ์ค๋ธ์ ํธ์ ์ ๋ ฌ ์๋งจํฑ์ ๋ํ ์ธ๋ถ ์ฌํญ์ OrderComparator์ ๋ํ javadoc์ ์ฐธ์กฐํ์ญ์์ค.
Not supported in BeanPostProcessor or BeanFactoryPostProcessor
์ค์ ์ฃผ์
์ BeanPostProcessor๋ฅผ ํตํด ์ํ๋๋ฏ๋ก @Autowired๋ฅผ ์ฌ์ฉํ์ฌ BeanPostProcessor ๋๋ BeanFactoryPostProcessor ์ ํ์ ์ฐธ์กฐ๋ฅผ ์ฃผ์
ํ ์ ์์ต๋๋ค.
AutowiredAnnotationBeanPostProcessor ํด๋์ค์ ๋ํ javadoc์ ์ฐธ์กฐํ์ญ์์ค (๊ธฐ๋ณธ์ ์ผ๋ก ์ด ์ฃผ์์ ์กด์ฌ ์ฌ๋ถ๋ฅผ ํ์ธ ํฉ๋๋ค).