Spring Bean๋“ฑ๋ก ๋ฉ”ํƒ€์ •๋ณด ์„ค์ •, Bean ๋“ฑ๋ก annotation(@Component, @Repository, @Service, @Controller) , Bean ์˜์กด๊ด€๊ณ„ ์ฃผ์ž… annotation (@Autowired, @Resource, @Value, @Quailfier), ํ”„๋กœํผํ‹ฐ ํŒŒ์ผ์„ ์ด์šฉํ•œ ์„ค์ •

2021. 11. 9. 16:23ใ†Spring

728x90

 

1. Bean ๋“ฑ๋ก ๋ฉ”ํƒ€์ •๋ณด ๊ตฌ์„ฑ 

 

1๏ธโƒฃ XML ๋‹จ๋… ์‚ฌ์šฉ 

์ง€๊ธˆ๊นŒ์ง€ ์‚ฌ์šฉํ•ด์™”๋˜ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ชจ๋“  Bean์„ XML์— ๋“ฑ๋กํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

-> ์ด ๋ฐฉ๋ฒ•์€ ๋ชจ๋“  Bean์„ XML ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์ง€๋งŒ Bean ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์•„์ง€๋ฉด xml ํŒŒ์ผ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์ ์  ์–ด๋ ค์›Œ์ง„๋‹ค. 

-> ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๋“ค๊ณผ ๊ณตํ†ต์œผ๋กœ ํ•ด๋‹น ์„ค์ • ํŒŒ์ผ์„ ๊ณต์œ ํ•ด์„œ ๊ฐœ๋ฐœํ•œ๋‹ค๋ฉด ์„ค์ • ํŒŒ์ผ์„ ๋™์‹œ์— ์ˆ˜์ •ํ•˜๋‹ค๊ฐ€ ์ถฉ๋Œ์ด ์ผ์–ด๋‚˜๋Š” ์œ„ํ—˜์ด ์ƒ๊ธธ ์ˆ˜๋„ ์žˆ๋‹ค. 

-> DI ์— ํ•„์š”ํ•œ Setter ๋ฉ”์„œ๋“œ์™€ Constructor ๊ฐ€ ์ฝ”๋“œ ๋‚ด์— ๋ฐ˜๋“œ์‹œ ์กด์žฌํ•ด์•ผํ•œ๋‹ค.

 

2๏ธโƒฃ XML๊ณผ ๋นˆ ์Šค์บ๋‹(Bean Scanning) ์˜ ํ˜ผ์šฉ 

Bean์œผ๋กœ ์‚ฌ์šฉ๋  ํด๋ž˜์Šค์— ํŠน๋ณ„ํ•œ annotation์„ ๋ถ€์—ฌํ•ด์ฃผ๋ฉด ์ด๋Ÿฐ ํด๋ž˜์Šค๋ฅผ ์ž๋™์œผ๋กœ ์ฐพ์•„์„œ Bean์œผ๋กœ ๋“ฑ๋กํ•ด์ค€๋‹ค. 

ํŠน์ • annotation์ด ๋ถ™์€ ํด๋ž˜์Šค๋ฅผ ์ž๋™์œผ๋กœ ์ฐพ์•„์„œ Bean์œผ๋กœ ๋“ฑ๋กํ•ด์ฃผ๋Š” ๋ฐฉ์‹์„ ๋นˆ ์Šค์บ๋‹(Bean Scanning)์„ ํ†ตํ•œ ์ž๋™์ธ์‹ Bean ๋“ฑ๋ก๊ธฐ๋Šฅ์ด๋ผ๊ณ  ํ•œ๋‹ค. 

-> annotation์„ ๋ถ€์—ฌํ•จ์œผ๋กœ์จ ์ž๋™ ์Šค์บ”์œผ๋กœ ๋นˆ ๋“ฑ๋กํ•˜๋ฉด xml ๋ฌธ์„œ์— ๋Œ€ํ•œ ์ƒ์„ฑ๊ณผ ๊ด€๋ฆฌ๋ฅผ ์•ˆํ•ด๋„ ๋ผ์„œ ๊ฐœ๋ฐœ ํšจ์œจ์ด ๋†’์•„์ง„๋‹ค. 

-> ํ•˜์ง€๋งŒ Bean๋“ค๊ฐ„์˜ ์˜์กด๊ด€๊ณ„๋ฅผ xml ๋ฌธ์„œ์— Bean ๋“ฑ๋กํ•˜๋Š” ๋ฐฉ์‹๋ณด๋‹ค๋Š” ํ•œ๋ˆˆ์— ํŒŒ์•…ํ•  ์ˆ˜ ์—†๋‹ค. 

 

 

2. Bean ๋“ฑ๋ก Annotation 

 

1๏ธโƒฃ @Component 

์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ผ๋ฐ˜์ ์ธ ์Šคํ…Œ๋ ˆ์˜ค ํƒ€์ž…์œผ๋กœ <bean> ํƒœ๊ทธ์™€ ๋™์ผํ•œ ์—ญํ• ์„ ํ•œ๋‹ค. 

 

2๏ธโƒฃ @Repository 

persistence ๋ ˆ์ด์–ด, ์˜์†์„ฑ์„ ๊ฐ€์ง€๋Š” ์†์„ฑ(ํŒŒ์ผ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค)์„ ๊ฐ€์ง„ ํด๋ž˜์Šค 

 

3๏ธโƒฃ @Service 

์„œ๋น„์Šค ๋ ˆ์ด์–ด, ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง์„ ๊ฐ€์ง„ ํด๋ž˜์Šค 

 

4๏ธโƒฃ @Controller 

ํ”„๋ฆฌ์  ํ…Œ์ด์…˜ ๋ ˆ์ด์–ด, ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์›น ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํด๋ž˜์Šค 

 

 

3. Bean ์˜์กด๊ด€๊ณ„ ์ฃผ์ž… Annotation 

@Autowired, @Resource ์–ด๋…ธํ…Œ์ด์…˜์€ ์˜์กดํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์ž๋™์œผ๋กœ ์ฃผ์ž…ํ•ด์ฃผ๋Š” annotation์ด๋‹ค. 

 

1๏ธโƒฃ @Autowired 

@Autowired๋Š” ์˜์กดํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์ž๋™์œผ๋กœ ์ฃผ์ž…ํ•ด์ฃผ๋Š” annotation์ด๋‹ค. 

@Autowired๋Š” ํ”„๋กœํผํ‹ฐ, Setter ๋ฉ”์„œ๋“œ, ์ƒ์„ฑ์ž, ์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

์ด ์–ด๋…ธํ…Œ์ด์…˜์€ <property>์™€ <constructor-arg> ํƒœ๊ทธ์™€ ๋™์ผํ•œ ์—ญํ• ์„ ํ•œ๋‹ค. 

์˜์กดํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์ฃผ์ž…ํ•  ๋•Œ์—๋Š” Type์„ ์ด์šฉํ•œ๋‹ค. 

 

2๏ธโƒฃ @Resource

@Resource ์–ด๋…ธํ…Œ์ด์…˜์€ ์˜์กดํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์ž๋™์œผ๋กœ ์ฃผ์ž…ํ•˜๋Š” annotation์ด๋‹ค. 

@Resource๋Š” ํ”„๋กœํผํ‹ฐ, setter ๋ฉ”์„œ๋“œ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜์กดํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์ฃผ์ž…ํ•  ๋•Œ์—๋Š” Name์„ ์ด์šฉํ•œ๋‹ค. 

 

3๏ธโƒฃ @Value

@Value๋Š” ๋‹จ์ˆœํ•œ ๊ฐ’์„ ์ฃผ์ž…ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค. 

<property name ="xxx" value ="spring"/>์—์„œ value์™€ ๊ฐ™์€ ์—ญํ• ์„ ํ•œ๋‹ค.

 == @Value("Spring") 

 

4๏ธโƒฃ @Qualifier 

@Qualifier๋Š” @Autowired ์–ด๋…ธํ…Œ์ด์…˜๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•œ๋‹ค. 

@Autowired๋Š” ํƒ€์ž…์„ ์ฐพ์•„์„œ ์ฃผ์ž…ํ•˜๊ณ , ๋™์ผํ•œ ํƒ€์ž…์˜ Bean ๊ฐ์ฒด๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ ์กด์žฌํ•œ๋‹ค๋ฉด ํŠน์ • Bean์„ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ๋Š” @Qualifier ๋ฅผ ๊ฐ™์ด ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค. 

 

 

5๏ธโƒฃ <context:component-scan> 

<context:component-scan> ํƒœ๊ทธ๋Š” Componenet Scan์„ ์ง€์›ํ•˜๋Š” ํƒœ๊ทธ์ด๋‹ค. 

@Component๋ฅผ ํ†ตํ•ด ์ž๋™์œผ๋กœ Bean์„ ๋“ฑ๋กํ•˜๊ณ , @Autowired๋กœ ์˜์กด๊ด€๊ณ„๋ฅผ ์ฃผ์ž…๋ฐ›์€ ์–ด๋…ธํ…Œ์ด์…˜ ํด๋ž˜์Šค์—์„œ ์„ ์–ธํ•˜์—ฌ ์‚ฌ์šฉํ–ˆ์„ ๊ฒฝ์šฐ์—๋Š” ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ ์œ„์น˜ํ•œ ํŠน์ • ํŒจํ‚ค์ง€๋ฅผ Scanํ•˜๊ธฐ ์œ„ํ•œ ์„ค์ •์„ xml์— ์ถ”๊ฐ€ํ•ด์ค˜์•ผํ•œ๋‹ค. 

์ด๋•Œ <context:include-filter> ํƒœ๊ทธ์™€ <context:exclude-filter> ํƒœ๊ทธ๋ฅผ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๋ฉด ์ž๋™ ์Šค์บ” ๋Œ€์ƒ์— ํฌํ•จ์‹œํ‚ฌ ํด๋ž˜์Šค์™€ ํฌํ•จ์‹œํ‚ค์ง€ ์•Š์„ ํด๋ž˜์Šค๋ฅผ ๊ตฌ์ฒด์ ์œผ๋กœ ๋ช…์‹œํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

4. annotation์„ ์‚ฌ์šฉํ•˜์—ฌ POJO ํด๋ž˜์Šค ์ƒ์„ฑํ•˜๊ธฐ 

1๏ธโƒฃ StringPrinter.java

๊ธฐ์กด StringPrinter์— @Component ์–ด๋…ธํ…Œ์ด์…˜์„ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค. 

 

2๏ธโƒฃ Hello.java

์ฃผ์„ ์ฒ˜๋ฆฌ๋œ ์–ด๋…ธํ…Œ์ด์…˜์€ ์ผ๋‹จ ๋ฌด์‹œ

@Value("Spring")์„ ํ†ตํ•ด String name์— ๊ฐ’์„ ์„ค์ •ํ•ด์ค€๋‹ค.

๊ทธ๋ฆฌ๊ณ  @Autoried๋ฅผ ํ†ตํ•ด ํƒ€์ž…์„ ์ฐพ์•„์˜์กดํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์ฐพ์•„ ์ฃผ์ž…ํ•ด์ฃผ๊ณ , @Qualifier๋ฅผ ํ†ตํ•ด ๋™์ผํ•œ ํƒ€์ž…์ด ์กด์žฌํ•˜๋ฉด ๊ทธ์ค‘ ํŠน์ •ํ•œ Bean์„ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ ์ด ์–ด๋…ธํ…Œ์ด์…˜์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด์ค€๋‹ค.

 

3๏ธโƒฃ annot.xml 

์ด์ œ annot.xml ์ฆ‰ ๋นˆ ์„ค์ • ํŒŒ์ผ์—๋Š” @Autowired๋กœ ์˜์กด๊ด€๊ณ„๋ฅผ ์ฃผ์ž…๋ฐ›๋Š” ์–ด๋…ธํ…Œ์ด์…˜์„ ํด๋ž˜์Šค์— ์„ ์–ธํ•˜์—ฌ ์‚ฌ์šฉํ–ˆ๋‹ค๋ฉด ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ ์œ„์น˜ํ•œ ํŠน์ • ํŒจํ‚ค์ง€๋ฅผ Scanํ•˜๊ธฐ ์œ„ํ•ด ์„ค์ •์„ xml์— ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

4๏ธโƒฃ HelloBeanAnnotTest.java

5๏ธโƒฃ ์‹คํ–‰๊ฒฐ๊ณผ 

 

 

 

5. ํ”„๋กœํผํ‹ฐ(Property) ํŒŒ์ผ์„ ์ด์šฉํ•œ ์„ค์ • 

 

1๏ธโƒฃ Property ํŒŒ์ผ 

์˜ˆ์ „์— ์ž‘์„ฑํ–ˆ๋˜ Property ํŒŒ์ผ์— ๋ฐ‘์— ๋‘์ค„์„ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

 

2๏ธโƒฃ annot.xml ํŒŒ์ผ 

ํ”„๋กœํผํ‹ฐ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ ์•Œ๋ ค์คŒ

 

3๏ธโƒฃ Hello.java

์•ž์—์„œ ์ฃผ์„์ฒ˜๋ฆฌํ–ˆ๋˜ ๋ถ€๋ถ„์„ ํ’€๊ณ  ์ด์ „ ์–ด๋…ธํ…Œ์ด์…˜๋“ค ์ฃผ์„์ฒ˜๋ฆฌํ•ด์ค€๋‹ค.

๊ทธ๋ฆฌ๊ณ  ${} ์„ ์‚ฌ์šฉํ•ด์„œ ๊ฐ’์„ ์ง€์ •ํ•ด์ค€๋‹ค.

 

4๏ธโƒฃ HelloBeanAnnotTest.java  ์‹คํ–‰๊ฒฐ๊ณผ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90