- ์คํ๋ง ํ๋ ์์ํฌ๋ ์ฃผ์๊ธฐ๋ฅ์ผ๋ก DI, AOP, MVC, JDBC ๋ฑ์ ์ ๊ณตํ๋ค.
- ์คํ๋ง ํ๋ ์์ํฌ์์ ์ ๊ณตํ๊ณ ์๋ ๋ชจ๋
- Spring-core : di์ ioc๋ฅผ ์ ๊ณต
- Spring-aop : aop ๊ตฌํ ๊ธฐ๋ฅ ์ ๊ณต
- Spring-jdbc : ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฝ๊ฒ ๋ค๋ฃฐ ์ ์๋ ๊ธฐ๋ฅ ์ ๊ณต
- Spring-tx : ํธ๋์ญ์ ๊ด๋ จ ๊ธฐ๋ฅ ์ ๊ณต
- Spring webmvc : model-view-controller ์คํ๋ง mvc๊ตฌํ ๊ธฐ๋ฅ ์ ๊ณต
- ์ด๋ฌํ ๋ชจ๋์ ์ฌ์ฉํ๋ ค๋ฉด ๊ฐ๋ฐ ํ๋ก์ ํธ์ xml ํ์ผ๋ฑ์ ์ด์ฉํด์ ๊ฐ๋ฐ์๊ฐ ์ง์ ํ๋ฉด ๋๋ค.
- ์คํ๋ง ์ปจํ ์ด๋(IoC) : ์คํ๋ง์์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์กฐ๋ฆฝํ๋ ์ปจํ ์ด๋๋ก, ์ปจํ ์ด๋๋ฅผ ํตํด ์์ฑ๋ ๊ฐ์ฒด๋ฅผ ๋น์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
- Maven์ ์ด์ฉํด์ ์คํ๋ง ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ ( maven: ๋น๋ํ๋ ํด )
- Pom.xml ์์ฑ => ํ์ํ ์คํ๋ง ๋ชจ๋ ๊ฐ์ ธ์ค๊ธฐ ์ํ ํ์ผ๋ค, ๋ฉ์ด๋ธ ์ค์ ํ์ผ๋ก ๋ฉ์ด๋ธ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐ๊ฒฐํด์ฃผ๊ณ , ๋น๋๋ฅผ ์ํ ํ๋ซํผ
- ํด๋ ๊ตฌ์กฐ
src/main/java -> ์ค์ ๋ก java๋ฅผ ์ฌ์ฉํด ๊ธฐ๋ฅ ๊ตฌํ์ ํด๋๊ฐ๋ ๊ณณ
src/main/resources -> java ํ๋ก๊ทธ๋๋ฐ์ ํ๋ฉด์ ํ์ํ ์ฌ๋ฌ๊ฐ์ง ํ์ผ๋ค(์คํ๋ง ์ค์ ํ์ผ)
- applicationContext.xml ํ์ผ์ ์คํ๋ง ์ปจํ ์ด๋ ์ญํ ์ด๋ค.
- DI(Dependency injection)
-๋ฐฐํฐ๋ฆฌ ์ผ์ฒดํ : ๋ฐฐํฐ๋ฆฌ๊ฐ ๋จ์ด์ง๋ฉด ์ฅ๋๊ฐ์ ์๋ก ๊ตฌ์ ํด์ผ ํ๋ค.
-๋ฐฐํฐ๋ฆฌ ๋ถ๋ฆฌํ : ๋ฐฐํฐ๋ฆฌ๊ฐ ๋จ์ด์ง๋ฉด ๋ฐฐํฐ๋ฆฌ๋ง ๊ต์ฒดํ๋ฉด ๋๋ค.
=> ๋ฐฐํฐ๋ฆฌ๊ฐ ์์กด ์ฃผ์ ์ ํ๋ค.
์์ฑ์์์ ์์กด ์ฃผ์ ์ ํด์ฃผ๊ณ , set ํจ์์์๋ ์์กด ์ฃผ์ ์ ํด์ค๋ค.
- ์คํ๋ง DI ์ค์ ๋ฐฉ๋ฒ ์คํ๋ง ์ปจํ ์ด๋ ์์ฑ ๋ฐ ๋น(Bean) ๊ฐ์ฒด ํธ์ถ ๊ณผ์
<ํ๋ก์ ํธ ์ค๋ช >
-ํ์ ๊ด๋ฆฌ ํ๋ก์ ํธ ํ์ ๋ฒํธ, id, pw, ๋์ด, ์ฑ๋ณ, ์ ๊ณต
ํ์ ์ ๋ณด select, update, delete ๊ธฐ๋ฅ
*DI ํ์ฑ์ ์ด๋ป๊ฒ?
Service์์ DAO๋ฅผ ๋ฃ์ด์ค๋ค.
์์๋ก) Assembler ํ์ผ ์์ dao๋ฅผ ์์ฑํด์ service์ ์ฃผ์ ํด์ฃผ๊ณ ์๋ค.
ํ์ง๋ง, ์ค์ ์คํ๋ง์์๋ Spring ์ค์ ํ์ผ ์์ Constructor-arg ํ๊ทธ ์์ dao๋ฅผ ์ฃผ์ ํด์ฃผ๊ณ ์๋ค. => GeneralXMLApplicationContext์ ํตํด getBean์ ํด์ค๋ค.
- ๋ค์ํ ์์กด ๊ฐ์ฒด ์ฃผ์
- ์์ฑ์๋ฅผ ์ด์ฉํ ์์กด ๊ฐ์ฒด ์ฃผ์
- Setter ๋ฅผ ์ด์ฉํ ์์กด ๊ฐ์ฒด ์ฃผ์ Property ํ๊ทธ๋ฅผ ์ด์ฉํ๋ค. Name, value ์์ฑ์ ๋ฃ์ด์ค๋ค.
- List ํ์ ์์กด ๊ฐ์ฒด ์ฃผ์ Property ํ๊ทธ๋ฅผ ์ด์ฉํ๊ณ , list ํ๊ทธ ์์ value ํ๊ทธ๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
- Mapํ์ ๊ฐ์ฒด ์ฃผ์ Map ํ๊ทธ๋ฅผ ์ด์ฉํ๋ค.
- ์คํ๋ง ์ค์ ํ์ผ ๋ถ๋ฆฌ applicationContext.xml -> app1.xml, app2.xml, app3.xml ๋ถ๋ฆฌ
App1.xml -> dao, service ์ค์
App2.xml -> bean ํด๋์ค ์ค์
App3.xml -> bean ํด๋์ค ์ค์
- ๋ถ๋ฆฌ๋ ํ์ผ -> ๋ฐฐ์ด๋ก classpath ์ค์ , import๋ก ๋ฃ์ด์ฃผ๊ธฐ
- ๋น(Bean)์ ๋ฒ์
-์ฑ๊ธํค(singleton) : ์คํ๋ง ์ปจํ ์ด๋์์ ์์ฑ๋ ๋น ๊ฐ์ฒด์ ๊ฒฝ์ฐ ๋์ผํ ํ์ ์ ๋ํด์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ ๊ฐ๋ง ์์ฑ์ด ๋๋ฉฐ, getBean() ๋ฉ์๋๋ก ํธ์ถ๋ ๋ ๋์ผํ ๊ฐ์ฒด๊ฐ ๋ฐํ๋๋ค.
-ํ๋กํ ํ์ : ์ฑ๊ธํค ๋ฒ์์ ๋ฐ๋์ ๊ฐ๋ ๋ ์๋๋ฐ ์ด๋ฅผ ํ๋กํ ํ์ ๋ฒ์๋ผ๊ณ ํ๋ค. ํ๋กํ ํ์ ์ ๊ฒฝ์ฐ ๊ฐ๋ฐ์๋ ๋ณ๋๋ก ์ค์ ์ ํด์ค์ผ ํ๋๋ฐ, ์คํ๋ง ์ค์ ํ์ผ์์ ๋น ๊ฐ์ฒด๋ฅผ ์ ์ ํ ๋ scope์์ฑ์ ๋ช ์ํด ์ฃผ๋ฉด ๋๋ค.
Scope = โprototypeโ ์ ์ค์ ํ๋ฉด ๋ค๋ฅธ ๊ฐ์ฒด๋ก ๋ง๋ค์ด์ง๋ค. ๋๊ฐ์ ๊ฐ์ฒด๋ฅผ ๋๋ฒ ๋ง๋ค์ด์ฃผ๋ฉด ๊ฐ๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด๋ก ๋ง๋ค์ด์ง๋ค.
- ์์กด ๊ฐ์ฒด ์๋ ์ฃผ์
- ์คํ๋ง ์ค์ ํ์ผ์์ ์์กด ๊ฐ์ฒด๋ฅผ ์ฃผ์ ํ ๋ ๋๋ ํ๊ทธ๋ก ์์กด ๋์ ๊ฐ์ฒด๋ฅผ ๋ช ์ํ์ง ์์๋ ์คํ๋ง ์ปจํ ์ด๋๊ฐ ์๋์ผ๋ก ํ์ํ ์์กด ๋์ ๊ฐ์ฒด๋ฅผ ์ฐพ์์ ์์กด ๋์ ๊ฐ์ฒด๊ฐ ํ์ํ ๊ฐ์ฒด์ ์ฃผ์ ํด ์ฃผ๋ ๊ธฐ๋ฅ์ด๋ค. ๊ตฌํ ๋ฐฉ๋ฒ์ @Autowired์ @Resource ์ด๋ ธํ ์ด์ ์ ์ด์ฉํด์ ์ฝ๊ฒ ๊ตฌํํ ์ ์๋ค.
-
@Autowired ์ฃผ์ ํ๋ ค๊ณ ํ๋ ๊ฐ์ฒด์ ํ์ ์ด ์ผ์นํ๋ ๊ฐ์ฒด๋ฅผ ์๋์ผ๋ก ์ฃผ์ ํ๋ค. Ex) ๋จ์ด๋ฅผ ๊ฒ์์ ํ๋ ํ๋ก์ ํธ context:annotation-config/ => ์ด๋ ธํ ์ด์ ์ฌ์ฉ์ ์ํด ์ถ๊ฐ
-
@Resource ์ฃผ์ ํ๋ ค๊ณ ํ๋ ๊ฐ์ฒด์ ์ด๋ฆ์ด ์ผ์นํ๋ ๊ฐ์ฒด๋ฅผ ์๋์ผ๋ก ์ฃผ์ ํ๋ค. But, ์์ฑ์์์๋ ์ธ ์ ์์.
- ์์กด ๊ฐ์ฒด ์ ํ ๋์ผํ ๊ฐ์ฒด๊ฐ 2๊ฐ ์ด์์ธ ๊ฒฝ์ฐ ์คํ๋ง ์ปจํ ์ด๋๋ ์๋ ์ฃผ์ ๋์ ๊ฐ์ฒด๋ฅผ ํ๋จํ์ง ๋ชปํด์ Exception์ ๋ฐ์์ํจ๋ค. => ํด๊ฒฐ๋ฐฉ๋ฒ : @Qualifier ๋ฅผ ์ด์ฉ! Ex)
-
์์กด๊ฐ์ฒด ์๋ ์ฃผ์ ์ฒดํฌ @Autowired(required= false) //๊ฑฐ์ ์ฐ์ง ์์
-
@Inject ์ด๋ ธํ ์ด์
@autowired ์ ๊ฑฐ์ ๋น์ทํ๊ฒ ์ด์ฉํด์ ์์กด ๊ฐ์ฒด๋ฅผ ์๋์ผ๋ก ์ฃผ์ ์ ํ ์ ์๋ค.
์ฐจ์ด์ : required ์์ฑ์ ์ง์ํ์ง ์๋๋ค.
- Inject ์ฌ์ฉํ ์ ๋์ผํ ๊ฐ์ฒด๊ฐ ์ฌ๋ฌ๊ฐ ์ฌ์ฉ๋ ๊ฒฝ์ฐ
@Inject @Named(value=โโ) ์ด๋ ๊ฒ ๋ง์ด ์ฐ์ธ๋ค.
=> Autowired ๊ฐ ๋ ๋ง์ด ์ฐ์ธ๋ค.
- ์คํ๋ง ์ปจํ ์ด๋ ์๋ช ์ฃผ๊ธฐ
- GenericXmlApplicationContext๋ฅผ ์ด์ฉํ ์คํ๋ง ์ปจํ ์ด๋ ์์ฑ(์์ฑ ์์ )
- getBean()์ ์ด์ฉํ ๋น ๊ฐ์ฒด ์ด์ฉ
- close()์ ์ด์ฉํ ์คํ๋ง ์ปจํ ์ด๋ ์ข ๋ฃ (์๋ฉธ ์์ )
- ๋น ๊ฐ์ฒด์ ์๋ช ์ฃผ๊ธฐ๋ ์คํ๋ง ์ปจํ ์ด๋์ ์๋ช ์ฃผ๊ธฐ์ ๊ฐ์ด ํ๋ค.
- ๋น ๊ฐ์ฒด๊ฐ ์์ฑ์ด ๋๊ณ ์๋ฉธ์ด ๋๋ ์์ ์ ํน์ ํ ์์ ์ ํ ์ ์๋ค.
- Interface๋ฅผ ์ด์ฉํ ๋ฐฉ๋ฒ InitializingBean, DisposableBean interface ์ฐธ์กฐ
- Init-method, destroyMethod
Bean ์์ฑ์ ์์ฑ
- ์ด๋ ธํ ์ด์ ์ ์ด์ฉํ ์คํ๋ง ์ค์
- Xml ํ์ผ์ java ํ์ผ๋ก ๋ณ๊ฒฝ ** @configuration ์ด๋ ธํ ์ด์ ์ด์ฉ(์คํ๋ง ์ปจํ ์ด๋๋ก์จ ๋ช ์นญ์ ํด์ค ๋ ์ฐ์), @Bean ์ด๋ ธํ ์ด์ ์ด์ฉ(bean ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ์ฐ์) GenericXmlApplicationContext ๋์ AnnotationConfigApplicationContext ํด๋์ค๋ฅผ ์ด์ฉ
- Java ํ์ผ ๋ถ๋ฆฌ
- ์? ํ ํ์ผ์ ๋ชจ๋ ์์ฑ ์ ์ ์ง๋ณด์๊ฐ ํ๋ค๋ค
Dao, Service, Database, Util ๋ฑ์ผ๋ก ๋ณดํต ๋ถ๋ฆฌ ** ํ์ผ ๋ถ๋ฆฌ ์ ๋ค๋ฅธ ํ์ผ์์ ์ฐธ์กฐํ๊ณ ์ถ์ ๋ฉ์๋๊ฐ ์์ ์ -> @Autowired ์ด๋ ธํ ์ด์ ์ ํตํด ์ฐธ์กฐ - ๋ถ๋ฆฌ๋ ํ์ผ์ ์ด๋ป๊ฒ ๋ถ๋ฌ์ฌ๊น?
- ๋ฐฐ์ด ํ์ ์ผ๋ก ๋์ดํด์ค๋ค.
- @Import ์ด๋
ธํ
์ด์
1๋ฒ ํด๋์ค์์ @Import({2๋ฒ ํด๋์ค, 3๋ฒํด๋์ค}) ๋ฅผ ์จ์ค๋ค.