๐ง @Autowired, @Resource, @Inject์ ์ฌ์ฉํ๋ ์ด์
์์กด ์ฃผ์ ์ ์ํด ์ฌ์ฉํ๋ค.
ํน์ Bean ๊ธฐ๋ฅ์ ์ํํ๊ธฐ ์ํด ๊ธฐ๋ฅ์ ํ์ํ ํน์ ํ Bean์ ์ฐธ์กฐํด์ผ ํ๋๋ฐ,
์ด ๋ ํน์ Bean์ ์๋ ์ฐ๊ฒฐ์ ์ํด ์ ์ด๋ ธํ ์ด์ ๋ค์ ์ฌ์ฉํ๋ค.
๐ @Autowired vs @Resource vs @Inject
public class Animal{}
@Component
public class Dog implements Animal{}
@Component
public class Cat implements Animal{}
์ฐจ์ด
@Autowired
private Dog cat
//ํ์
๊ธฐ์ค -- Dog ํ์
์ผ๋ก ์ฐ๊ฒฐ
@Resource
private Dog cat
//์ด๋ฆ ๊ธฐ์ค -- Cat ํ์
์ผ๋ก ์ฐ๊ฒฐ
@Inject
private Cat dog
//ํ์
๊ธฐ์ค -- Cat ํ์
์ผ๋ก ์ฐ๊ฒฐ
๐ @Autowired์ ํน์ง
- Spring Framwork์๋ง ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ํ ํ๋ ์์ํฌ์์ ์ฌ์ฉ ๋ถ๊ฐ๋ฅํ๋ค.
- ์ด๋ฆ์ ํตํด ๋น์ ๊ฒ์ํ๋ค.
- @Autowired๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํน์ ๋น์ ์ฐพ์ง ๋ชปํ๋ฉด ์์ธ๋ฅผ ๋์ง๋ค.
- ์ด ๋ @Autowired์ required ์์ฑ๊ฐ์ false๋ก ์ง์ ํด ๋น์ ๋ชป ์ฐพ๋๋ผ๋ ๊ทธ๋ฅ ์น๋์น๊ฒ ํด์ค ์ ์๋ค.
@Autowired( required = false )
โป ๋ง์ฝ ํ์ ์ ๊ธฐ์ค์ผ๋ก IoC ์ปจํ ์ด๋์ ํธํ ํ์ ์ด ์ฌ๋ฟ ์กด์ฌํ๊ฑฐ๋ ๊ทธ๋ฃนํ์ด ์๋ ๋
@Primary, @Qualifier๋ฅผ ํตํด ํน์ ํ ๋น์ ์ฐ์ ๊ถ์ ๋ถ์ฌ ํ ์ ์๋ค.
@Autowired
@Qualifier("example")
๐ @Resource์ ํน์ง
- ์๋ฐ ์ธก์์ @Autowired๋ฅผ ์ฐธ๊ณ ํด ๋ง๋ ์ด๋ ธํ ์ด์ .
- javax.annotation์ ์ํด ์์.
- ์ด๋ฆ์ ํตํ ๊ฒ์ ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์, POJO๊ฐ ์ฌ๋ฟ์ผ ๋ ๋์์ด ๋ชจํธํ์ง ์๊ณ , ๋ช ํํ๋ค.
- @Autowired + @Qualifier
๐ @Inject์ ํน์ง
- ์๋ฐ ์ธก์์ @Autowired๋ฅผ ์ฐธ๊ณ ํด ๋ง๋ ์ด๋ ธํ ์ด์
- javax.annotation์ ์ํด ์์.
- ํ์ ์ ํตํ ๊ฒ์๋ฐฉ์
- ํ์ ์ด ๊ฐ์ POJO๊ฐ ์ฌ๋ฟ์ผ ๋ ์ปค์คํ ์ด๋ ธํ ์ด์ (custom annotation)์ ์์ฑํด์ผํ๋ค.
//์ปค์คํ
์ด๋
ธํ
์ด์
@Qualifier
@Target({ElementType.TYPE, ElementType.FILED, ElementType.PARAMETER})
@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface ExampleAnnotation {
}
//
//์ปค์คํ
์ด๋
ธํ
์ด์
์ ์์ฑํ ํ ๋น ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ POJO ์ฃผ์
ํด๋์ค์ ๋ถ์ธ๋ค.
@ExampleAnnotation
public class Example{ }
//
//์ฃผ์
์ง์ ์ ์ปค์คํ
์ด๋
ธํ
์ด์
์ ํจ๊ป ๋ถ์ด๋ฉด ๋ชจํธํด์ง์ง ์๋๋ค.
public calss ForExample{
@Inject @ExampleAnnotation
...
}
โป ์ @Qualifier๋ @Autowired์ @Qualifier์๋ ์ ํ ๋ค๋ฅด๋ค.
๐ ์ด๋ ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํด์ผ ํ ๊น?
๐ @Autowired๋ ์คํ๋ง ํ๋ ์์ํฌ์์ ๋์๊ธฐ ๋๋ฌธ์, ๋ค๋ฅธ ํ๋ ์์ํฌ๋ก ๋ณํ ํ ๋ ํธํ์ด ์๋๋ค.
๋ฐ๋ผ์ ํ ํ๋ ์์ํฌ๋ก๋ ํธํ์ ์ํ๋ค๋ฉด @Resource, @Inject๋ฅผ ์ฌ์ฉํ์.
๐ ์ด๋ฆ์ ํตํด ๊ฒ์ ๋ฐฉ์์ ์ฌ์ฉํ๊ณ ์ถ์ผ๋ฉด @Resource๋ฅผ ์ฌ์ฉํ๊ณ ,
ํ์ ์ ํตํด ๊ฒ์ ๋ฐฉ์์ ์ฌ์ฉํ๊ณ ์ถ์ผ๋ฉด @Autowired, @Inject๋ฅผ ์ฌ์ฉํ์.
์ ๋ฆฌ
์ฐธ๊ณ ๋ฌธ์ :
์คํ๋ง5 ๋ ์ํผ (๋งํด ๋ฐ์ด๋, ๋ค๋์ ๋ฃจ๋น์ค, ์กฐ์ ๋กฑ ์ /์ด์ผ์ ์ญ)
'Back-end > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] ๊ฐ์ฒด์งํฅ์ DAO - ๋ถ๋ฆฌ (ํ ํ๋ฆฟ ๋ฉ์๋ ํจํด) (0) | 2020.07.27 |
---|---|
[Spring] DAO ๊ธฐ๋ณธ ๊ตฌ์กฐ ๋ง๋ค๊ธฐ (0) | 2020.07.27 |
[Spring] @Bean ๊ณผ @Component ์ฐจ์ด (0) | 2020.07.14 |
[Spring] POJO ๊ตฌ์ฑํด๋ณด๊ธฐ (0) | 2020.07.12 |
[Spring] POJO ๋ ๋ฌด์์ธ๊ฐ? (2) | 2020.07.12 |