2021. 11. 9. 16:23ใSpring
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 ์คํ๊ฒฐ๊ณผ