Light Red Pointer [Spring] 01.@Autowired,@Resource,@Inject ์ฐจ์ด
 

[Spring] 01.@Autowired,@Resource,@Inject ์ฐจ์ด

 

 


 

 

 

์ง€๊ธˆ๊นŒ์ง€ ์ผํ•˜๋ฉด์„œ @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