
์ง๊ธ๊น์ง ์ผํ๋ฉด์ @Autowired,@Resource์ ๋ง์ด ๋ง๋๋ดค๋๋ฐ (Inject๋ ์์ง ๋ชป๋ดค์)
ํ์์์๋ @Autowired๋ง ์จ๋ณด๊ณ @Resource๋ @Inject๋ ์์จ๋ด์ ์ฒ์ @Resource๋ฅผ ๋ง๋ฌ์ ๋ ๋นํฉํ๋ค;
๊ทธ๋์ ๊ธํ๊ฒ ๊ตฌ๊ธ๋ง์ ํด๋ดค๋๋ฐ ์ฌ๋ฌ ์ ๋ฆฌ๊ฐ ์ ๋ ๋ธ๋ก๊ทธ๋ค์ ๊ธ์ ๋ณด๊ณ ์ธํฐ๋ท์ด ๋ฐ๋ฌ๋์ด ์ผ๋ง๋ ๋คํ์ธ์ง ์๊ฐํ๋ค^^..
ํน์๋ ๋์ฒ๋ผ ์ ์ ๊ฐ๋ฐ์๊ฐ ๋์๋๋ฐ ์ ์ด๋ ธํ ์ด์ ๋ค์ ์ฒ์๋ด์ ๋นํฉ์ค๋ฝ๋ค!! ํ๋ ๋ถ๋ค์ด ์ด ๊ธ์ ๊ผญ ๋ดค์ ์ข๊ฒ ๋ค๐
์๋ก
@Autowired, @Resource, @Inject์ ์คํ๋ง์์ ์์กด์ฑ ์ฃผ์ (Dependency Injection)์ ์ค์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ฃผ์ ์ด๋ ธํ ์ด์ ๋ค์ด๋ค. ์์กด์ฑ์ ์ฃผ์ ํ๋ค๋ ์ธก๋ฉด์์๋ ๋๊ฐ์ ๊ธฐ๋ฅ์ ํ๋๊ฒ ๊ฐ์ง๋ง ์กฐ๊ธ์ฉ ์ฐจ์ด๊ฐ ์๋ค. ์๋์์๋ ๊ทธ ์ฐจ์ด์ ๋ค์ ๋ํด ์์ธํ ์ดํด๋ณด๊ณ ์ ํ๋ค.
@Autowired
- Autowired๋ ํ์ ์ ๊ธฐ์ค์ผ๋ก ์์กด์ฑ์ ์ฃผ์ ํ๋ ๋ฐฉ์์ด๋ฉฐ Field, Setter ๋ฉ์๋, ์์ฑ์์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
- ๋ง์ฝ ๋์ผํ ํ์ ์ bean์ด ์ฌ๋ฌ ๊ฐ ์กด์ฌํ ๊ฒฝ์ฐ ์ฐธ์กฐ ๋ณ์์ ์ด๋ฆ๊ณผ ๋์ผํ ๋น์ ์ฐพ์์ ์ฃผ์ ํ๋ค.
- ํ์ ์ ๊ธฐ์ค์ผ๋ก ์์กด์ฑ์ ์ฃผ์ ํ์ง๋ง ์ด๋ฆ์ ๊ธฐ์ค์ผ๋ก ์์กด์ฑ์ ์ฃผ์ ํ๊ณ ์ถ๋ค๋ฉด @Qualifier์ ์ฌ์ฉํด์ ์ฃผ์ ๋ bean์ ์ง์ ํ ์ ์๋ค.
- ์คํ๋ง์์ ์ ๊ณตํ๋ ์ด๋ ธํ ์ด์ ์ด๋ผ์ ์คํ๋ง ์ด์ธ์์๋ ์ฌ์ฉํ ์ ์๋ค.
@Service
public class AutowiredTest {
private final SampleTest sample;
//์์ฑ์์ ์ด๋
ธํ
์ด์
์ ์ฉ
@Autowired
public AutowiredTest(SampleTest sample) {
this.sample = sample;
}
}
@Service ์ด๋ ธํ ์ด์ ์ด ์ ์ฉ๋ AutowiredTest ํด๋์ค๊ฐ ์คํ๋ง์ ๋น์ผ๋ก ๋ฑ๋ก๋๋ฉฐ, @Autowired ์ด๋ ธํ ์ด์ ์ด ์ ์ฉ๋ ์์ฑ์๋ฅผ ํตํด SampleTest ํ์ ์ ๋น์ด ์ฃผ์ ๋๋ค. ๋ํ ํด๋์ค ์ด๋ฆ๊ณผ ์์ฑ์ ์ด๋ฆ์ด ์ผ์นํด์ผํ๋ค.
[์๋ชป๋ ๋ฐฉ์↓]
@Service
public class AutowiredTest {
private final SampleTest sample;
@Autowired
public MyService(SampleTest sample) {
this.sample = sample;
}
}
@Resource
- Resource๋ name๊ฐ(์ด๋ฆ)์ ์ฌ์ฉํด์ ์์กด์ฑ์ ์ฃผ์ ํ๋ ๋ฐฉ์์ด๋ฉฐ Field, Setter ๋ฉ์๋์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
(*์์ฑ์ ์ฌ์ฉ ๋ถ๊ฐ๋ฅ)
- ๊ธฐ๋ณธ์ ์ผ๋ก ์ฐธ์กฐ ๋ณ์์ ์ด๋ฆ๊ณผ ๋์ผํ bean์ด ์กด์ฌํ๋ฉด ํด๋น ๋น์ ์ฃผ์ ํ๋ค.
- ์ด๋ฆ์ผ๋ก bean์ ์ฐพ์ง ๋ชปํ๋ค? → ํ์ ์ ๊ธฐ์ค์ผ๋ก ์์กด์ฑ์ ์ฃผ์ ํ๋ค.
- ๋๊ฐ name="" ์ ํตํด ์ด๋ฆ์ ์ง์ ์ง์ ํด ์ฐ๊ฒฐํด์ค๋ค.
- Java9 ์ดํ๋ถํฐ๋ ์ญ์ ๋์ด ์ฌ์ฉํ ์ ์๋คํ๋ค
@Service
public class ResourceTest {
//์์ฑ์ ์ฃผ์
๋ฐฉ์
//์ด๋ฆ์ด SampleTest์ธ ๊ฐ์ฒด๋ฅผ ์ฐพ์ ์ฐ๊ฒฐ
@Resource(name="SampleTest")
private SampleTest sample;
}
์ด๋ ๊ฒ ํด์ฃผ๋ฉด 'SampleTest'๋ผ๋ ์ด๋ฆ์ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ์ฐพ์์ sample ํ๋์ ์ฃผ์ ํ๋ผ๋ ์๋ฏธ๊ฐ ๋๋ ๊ฒ์ด๋ค.
@Inject
- Inject๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ ์ ๊ธฐ์ค์ผ๋ก ์์กด์ฑ์ ์ฃผ์ ํ๋ฉฐ Field, Setter ๋ฉ์๋, ์์ฑ์์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
- ๋์ผํ ํ์ ์ bean์ด ์ฌ๋ฌ ๊ฐ ์กด์ฌํ ๊ฒฝ์ฐ ์ฐธ์กฐ ๋ณ์์ ์ด๋ฆ๊ณผ ๋์ผํ ๋น์ ์ฐพ์์ ์ฃผ์ ํ๋ค.
- @Autowired์ ๋์ผํ๊ฒ ์ฌ์ฉ๋์ง๋ง ์ฐจ์ด์ ์ด๋ผ ํ๋ฉด Autowired๋ ์คํ๋ง์์ ์ ๊ณตํ๋ ์ด๋ ธํ ์ด์ ์ด๊ณ Inject๋ ์๋ฐ์์ ์ ๊ณตํ๋ ์ด๋ ธํ ์ด์ ์ด๋ค.
- @Autowired๋ ์คํ๋ง์ IoC ์ปจํ ์ด๋์ ๋ง๊ฒ ํ์ฅํ ์ ์๋ ์ปค์คํ ์ด๋ ธํ ์ด์ ์ ์ถ๊ฐ๋ก ์ ๊ณตํ๋ค.(*Inject๋ ์ ํ์ ์ด๋ฉฐ ์ปค์คํ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ธฐ ์ด๋ ต๋ค)
[์์ฑ์ ์ฃผ์ ๋ฐฉ์↓]
@Service
public class InjectTest {
private final SampleTest sample;
@Inject
public InjectTest(@Qualifier("SampleTestImpl") SampleTest sample) {
this.sample = sample;
}
}
[ํ๋ ์ฃผ์ ๋ฐฉ์↓] (๋ง์ง๋ง์ด๋ผ ํ๋ ์ฃผ์ ๋ฐฉ์๋ ์ถ๊ฐํ์์ผ๋ ์ผ๋ฐ์ ์ผ๋ก ๊ถ์ฅ๋๋ ๋ฐฉ์์ ์์ฑ์ ์ฃผ์ ๋ฐฉ์์ด๋ค.)
@Service
public class InjectTest {
@Inject
private final SampleTest sample;
}
์ ๋ฆฌ
| @Autowired | @Resource | @Inject | |
| ์ฌ์ฉ ๊ฐ๋ฅ | Field, Setter ๋ฉ์๋, ์์ฑ์ | Field, Setter ๋ฉ์๋ | Field, Setter ๋ฉ์๋, ์์ฑ์ |
| ์์กด์ฑ ์ฃผ์ ์์ | ํ์ → ์ด๋ฆ | ์ด๋ฆ → ํ์ | ํ์ → ์ด๋ฆ |
| bean ์ง์ ๋ฐฉ๋ฒ | - @Qualifier("bean๋ช
") - @Primary ์ฌ์ฉํ๊ธฐ |
@Resource(name="bean๋ช ") | - @Qualifier("bean ์ด๋ฆ") - @Primary ์ฌ์ฉํ๊ธฐ - @Named(value="bean๋ช ") |
| ๊ธฐํ | ์คํ๋ง์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ | Java 9 ์ดํ๋ก ์ญ์ ๋จ | ํน์ ํ๋ ์์ํฌ์ ์ข ์์ ์ด์ง ์์ |
Reference
https://codingnojam.tistory.com/13
[Spring] @Autowired, @Inject, @Resource ์ฐจ์ด์ ๋น๊ต์ ๋ฆฌ
์๋ ํ์ธ์ coding-knowjam์ ๋๋ค. ์ค๋์ ์์กด์ฑ ์ฃผ์ ์ ์ฌ์ฉํ๋ @Autowired, @Inject, @Resource์ ๋ํด์ ๊ฐ๊ฐ์ ๋ํด ์ด๋ค ํน์ง๊ณผ ์ฐจ์ด์ ์ด ์๋์ง ์์๋ณด๊ฒ ์ต๋๋ค. ์์๋ก ์ฌ์ฉํ ํด๋์ค๋ ์๋์ ๊ฐ
codingnojam.tistory.com
https://wooj-coding-fordeveloper.tistory.com/68
[Spring] @Autowired, @Inject, @Resource ์ฐจ์ด์ ์ ๋ฆฌ
๊ฒฐ๋ก ๋ถํฐ ๋ณด์๋ฉด ๋ชจ๋ DI๋ฅผ ์ํ ์ด๋ ธํ ์ด์ ์ด๋ฉฐ, ๋์์์์ ์ฐจ์ด์ ์๋ฐ ์ง์์์ ์ง์ํ๋๊ฑด์ง ์คํ๋ง์์ ์ง์ํ๋๊ฑด์ง์ ๋ํ ์ฐจ์ด๊ฐ ์๋ค. (๋ฌผ๋ก DI๊ฐ๋ ๊ฐ์ฒด๋ฅผ ์ด๋ค ๊ธฐ์ค์ผ๋ก ์ฐพ๋์ง ๋
wooj-coding-fordeveloper.tistory.com
'๐ Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Spring] 05.์คํ๋ง ORM๊ณผ JPA - Hibernate (11) | 2025.07.24 |
|---|---|
| [Spring] 04.MVC ๋? - MVC ๊ตฌ์กฐ ์ดํด (6) | 2025.07.22 |
| [Spring] 03.DI์ IoC ๊ฐ๋ ๋ฐ ์ด์ ๋ฆฌ (1) | 2024.04.15 |
| [Spring] 02.AOP๊ฐ๋ , Aspectํน์ง ์ด์ ๋ฆฌ (1) | 2024.01.04 |