b. IoC Containers - kimxavi/spring_tutorial GitHub Wiki
์คํ๋ง ์ปจํ ์ด๋๋ ์คํ๋ง ํ๋ ์์ํฌ์ ์ฝ์ด์ด๋ค. ์ปจํ ์ด๋๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ , ๊ทธ ๊ฒ ๋ค์ ์ฐ๊ฒฐ์์ผ์ฃผ๋ฉฐ, ๊ทธ๊ฒ๋ค์ ์ค์ ํด์ฃผ๊ณ , ์์ฑ๋ถํฐ ํ๊ดด๊น์ง์ ๋ผ์ดํ ์ฌ์ดํด์ ๊ด๋ฆฌํ๋ค. ์คํ๋ง ์ปจํ ์ด๋๋ ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑํ๋ ์ปดํผ๋ํธ๋ค์ ๊ด๋ฆฌํ๊ธฐ ์ํด์ dependency injection (DI)๋ฅผ ์ด๋ค. ๊ทธ ๊ฐ์ฒด๋ค์ Spring Beans๋ผ๊ณ ๋ถ๋ฆฐ๋ค.
์ปจํ ์ด๋๋ ์ ๊ณต๋ ์ค์ ๋ฉํ ๋ฐ์ดํฐ๋ฅผ ์ฝ์์ผ๋ก์จ ์กฐ๋ฆฝ๋๊ณ , ์ค์ ๋๊ณ , ์ด๋ค ๊ฐ์ฒด๊ฐ ์ธ์คํด์คํ ๋๋์ง ๋ฑ๋ฑ์ ์ง์๋ฅผ ๊ฐ์ ธ์ต๋๋ค. ์ค์ ๋ฉํ ๋ฐ์ดํฐ๋ XML, Java ์ด๋ ธํ ์ด์ ๋๋ ์๋ฐ ์ฝ๋์ผ๋ก ํํ๋ฉ๋๋ค. ์คํ๋ง IoC ์ปจํ ์ด๋๊ฐ ์์ ํ ๊ตฌ์ฑ ๋์ด์ง๊ณ ์คํ ๊ฐ๋ฅํ ์์คํ ์ด๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ์์ฑํ๊ธฐ ์ํด ์๋ฐ POJO ํด๋์ค์ ๊ตฌ์ฑ ๋ฉํ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์คํ๋ง์ ๋ ๊ฐ์ง ํ์ ์ ์ปจํ ์ด๋๋ฅผ ์ ๊ณตํฉ๋๋ค.
DI์ ๊ธฐ๋ณธ์ ์ธ ์ง์์ ์ ๊ณตํ๋ ๊ฐ์ฅ ๊ฐ๋จํ ์ปจํ ์ด๋์ด๋ค. org.springframework.beans.factory.BeanFactory ์ธํฐํ์ด์ค๋ก ์ ์๋๋ค. BeanFactory ์ BeanFactoryAware, InitializingBean, DisposableBean ๊ฐ์ ๊ด๋ จ๋ ์ธํฐํ์ด์ค ๋ค์ ์ด์ ๋ฒ์ , ๋ค๋ฅธ ๋ง์ ํ๋ ์์ํฌ์์ ํธํ์ฑ์ ์ํด ์กด์ฌํ๋ค.
๊ฐ์ฅ ํํ๊ฒ ์ฌ์ฉ๋๋ BeanFactory ๊ตฌํ์ฒด๋ XmlBeanFactory ํด๋์ค ์ด๋ค. ์ด ์ปจํ ์ด๋๋ XML ํ์ผ๋ก ๋ ์ค์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์์คํ ์ด๋ ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑํ๋๋ฐ ์ฌ์ฉํ๋ค. BeanFactory๋ ๋ณดํต ์์์ด ์ ํ์ ์ธ ๊ณณ์์ ์ ํธ๋๋ค.
HelloWorld.java
package com.tutorialspoint;
public class HelloWorld {
private String message;
public void setMessage(String message){
this.message = message;
}
public void getMessage(){
System.out.println("Your Message : " + message);
}
}
MainApp.java
package com.tutorialspoint;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
public class MainApp {
public static void main(String[] args) {
XmlBeanFactory factory = new XmlBeanFactory
(new ClassPathResource("Beans.xml"));
HelloWorld obj = (HelloWorld) factory.getBean("helloWorld");
obj.getMessage();
}
}
- XmlBeanFactory() ๋ฅผ ์ฌ์ฉํ์ฌ Bean์ ์์ฑํ๋ Factory ๊ฐ์ฒด๋ฅผ ๋ง๋ ๋ค.XmlBeanFactory() API๋ ์ค์ ํ์ผ์์ ์ธ๊ธ๋๋ ๋ชจ๋ bean ๊ฐ์ฒด์ ์์ฑ๊ณผ ์ด๊ธฐํ๋ฅผ ์ฒ๋ฆฌํ๋ค.ClassPathResource() API ๋ฅผ ์จ์ Bean ์ค์ ํ์ผ์ CLASSPATH์์ ๋ก๋ํ๋ค.
- ์์ฑ๋ BeanFactory ์ getBean() ์ ์ฌ์ฉํด์ ํ์ํ Bean ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์จ๋ค. ์ด ๋ฉ์๋๋ ์ค์ ๊ฐ์ฒด๋ก ์บ์คํ ํด์ผ๋๋ ๊ฐ์ฒด๋ฅผ bean ID๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ ธ์จ๋ค.
- ๊ฐ์ ธ์จ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ค. Beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="helloWorld" class="com.tutorialspoint.HelloWorld">
<property name="message" value="Hello World!"/>
</bean>
</beans>
Application Context๋ ์คํ๋ง์ ์ข ๋ ์ง๋ณด๋ ์ปจํ ์ด๋์ด๋ค. BeanFactory์ ์ ์ฌํ๊ฒ bean์ ์ ์๋ฅผ ๋ก๋ํ๊ณ , bean๋ค์ ์ฐ๊ฒฐํ๊ณ , ์์ฒญ์ ๋ฐ๋ผ bean์ ์กฐ์ ํ๋ค. ๊ฒ๋ค๊ฐ ํ๋กํผํฐ ํ์ผ๋ก ๋ถํฐ ํ ์คํธ ๋ฉ์์ง๋ค์ ๋ถํดํ๋ ๊ธฐ๋ฅ์ด๋ ๊ด์ฌ์๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋์ ์ดํ๋ฆฌ์ผ์ด์ ์ด๋ฒคํธ๋ฅผ ๋ฐํํ๋ ๊ธฐ๋ฅ์ด ์๋ค. ์ด ์ปจํ ์ด๋๋ org.springframework.context.ApplicationContext ์ธํฐํ์ด์ค๋ก ์ ์๋๋ค. ApplicationContext๋ BeanFactory์ ๋ชจ๋ ๊ธฐ๋ฅ์ ํฌํจํ๋ค. ์ผ๋ฐ์ ์ผ๋ก BeanFactory ๋ณด๋ค ๊ถ์ฅ๋๋ค.
- FileSystemXmlApplicationContext : ์ด ์ปจํ ์ด๋๋ XML ํ์ผ๋ก๋ถํฐ Bean์ ์ ์๋ฅผ ๋ถ๋ฌ๋ค์ธ๋ค. ์์ฑ์์ XML bean ์ค์ ํ์ผ์ full ๊ฒฝ๋ก๋ฅผ ์ค์ผํ๋ค.
- ClassPathXmlApplicationContext : ์์ ๋ฌ๋ฆฌ, CLASSPATH ์์ bean XML ์ค์ ํ์ผ์ ์ฐพ์๋ธ๋ค.
- WebXmlApplicationContext : ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ชจ๋ ๊ฐ์ฒด ์ ์ ํ์ผ๋ค์ ์ฝ์ด๋ค์ธ๋ค.
HelloWorld.java
package com.tutorialspoint;
public class HelloWorld {
private String message;
public void setMessage(String message){
this.message = message;
}
public void getMessage(){
System.out.println("Your Message : " + message);
}
}
MainApp.java
package com.tutorialspoint;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
public class MainApp {
public static void main(String[] args) {
ApplicationContext context = new FileSystemXmlApplicationContext
("C:/Users/ZARA/workspace/HelloSpring/src/Beans.xml");
// ApplicationContext context =
// new ClassPathXmlApplicationContext("Beans.xml");
HelloWorld obj = (HelloWorld) context.getBean("helloWorld");
obj.getMessage();
}
}
- C:/Users/ZARA/workspace/HelloSpring/src/Beans.xml ์ฒ๋ผ ๊ฒฝ๋ก๋ฅผ ์ฃผ๋ ์ ์ด ํน์ดํ๋ค.
beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="helloWorld" class="com.tutorialspoint.HelloWorld">
<property name="message" value="Hello World!"/>
</bean>
</beans>