์ด๋ฒ ๊ธ์ ์์ค ์ฝ๋๋ SKplanet Tacademy - Spring Framework Basic ๋์์ ๊ฐ์ ์๋ฃ์ ์๋ ์์ค์ฝ๋๋ฅผ ๊ฐ์ ธ๋ค๊ฐ ์ฌ์ฉํ์ต๋๋ค.
์ฐ๋ฆฌ๋ ์ง๋ ์๊ฐ IoC ์ปจํ ์ด๋์ DI์ ๋ํ ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋ ๊ณผ ์ฉ์ด๋ค์ ๋ํด์ ์์๋ณด์๋ค.
์ด์ ์ค๋์ Ioc Container(DI Container)๋ฅผ ์ด๋ป๊ฒ Spring์์ ์ฌ์ฉํ๋์ง ์์๋ณด์.
- POJO ํด๋์ค ์์ฑ
- ์ค์ ๋ฉํ์ ๋ณด XML ์์ฑ
- DI ํ ์คํธ ํด๋์ค ์์ฑ
POJO ํด๋์ค์ ๋ค์ด์ด๊ทธ๋จ
์ฐ๋ฆฌ๊ฐ ์์ ๋ก ๊ตฌ์ฑํ POJOํด๋์ค์ ๋ค์ด์ด๊ทธ๋จ์ ์๋์ ๊ฐ์ ํํ๋ก ๋ํ๋ผ ์ ์๋ค.
Hello
.classPrinter
.interfaceStringPrinter
.classConsolePrinter
.classbeans.xml
:: XML ์ค์ ํ์ผ๋ก
Hello
ํด๋์ค๋ StringPrinter
๋ ConsolePrinter
๋ฅผ ์ง์ ์์กดํ๋ ๊ฒ์ด ์๋๋ผ, Printer ์ธํฐํ์ด์ค๋ฅผ ์์กดํ๋ ํํ๋ก ์์ฑํ๋ค.
๊ทธ๋ฆฌ๊ณ XML ์ค์ ํ์ผ์์ Hello
ํด๋์ค๊ฐ ์ด๋ค Printer
๋ฅผ ์์กดํ๋์ง๋ฅผ ๋ช
์ํด ์ค ๊ฒ์ด๋ค.
POJO ํด๋์ค ์์ฑ
Hello.class
public class Hello {
private String name; // value type
private Printer printer; // ref type
public Hello(){}
/* ์์ ์กด์ฌํ๋ ๋ ๊ฐ์ง ๋ฉค๋ฒ ๋ณ์์ ๋ํ setter ๋ฉ์๋ */
public void setName(String name) {
this.name = name;
}
/* ์์ ์กด์ฌํ๋ ๋ ๊ฐ์ง ๋ฉค๋ฒ ๋ณ์์ ๋ํ setter ๋ฉ์๋ */
public void setPrinter(Printer printer) {
this.printer = printer;
}
String sayHello() {
return "Hello " + name;
}
public void print() {
this.printer.print(sayHello());
}
}
Printer.interface
public interface Printer {
void print(String message);
}
StringPrinter
public class StringPrinter implements Printer{
private StringBuffer sb = new StringBuffer();
@Override
public void print(String message) {
this.sb.append(message);
}
public String toString() {
return this.sb.toString();
}
}
ConsolePrinter
public class ConsolePrinter implements Printer{
@Override
public void print(String message) {
System.out.println(message);
}
}
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.xsd">
<bean id="hello" class="Hello">
<property name="name" value="Spring"/>
<property name="printer" ref="printer"/>
</bean>
<bean id="printer" class="StringPrinter" />
<bean id="consolePrinter" class="ConsolePrinter" />
</beans>
ํ์ DI๋ฅผ setter Injection์ผ๋ก ์ง์ ์ด ๋์ด์๊ธฐ ๋๋ฌธ์ <property>
ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋ค.
HelloBeanTest.class
HelloBeanTest
๋ Hello
Bean์ ํ
์คํธ ํด๋์ค์ด๋ค.
ํ ์คํธ์ ์์๋ ๋ค์๊ณผ ๊ฐ๋ค.
- Create IoC Container
- Get Hello Bean
- Get StringPrinter Bean
์ด์ ํด๋์ค๋ฅผ ์์ฑํด๋ณด์.
public class HelloBeanTest {
public static void main(String\[\] args) {
/*IOC Container*/
ApplicationContext context = new GenericXmlApplicationContext("resource/beans.xml");
Hello hello = (Hello) context.getBean("hello"); // XML ์ Hello
System.out.println(hello.sayHello());
hello.print();
Printer printer = (Printer)context.getBean("printer"); // XML ์ StringPrinter
System.out.println(printer.toString());
Hello hello2 = context.getBean("hello", Hello.class); // XML ์ Hello
hello2.print();
System.out.println(hello == hello2);
}
}
๊ทธ๋ผ ๊ฒฐ๊ณผ๋ก๋ ์๋์ ๊ฐ์ด ๋ํ๋๊ฒ ๋๋ค.
์ฌ๊ธฐ์ ๋ง ํ๋ true๋ Spring์ด SingleTon์ด๋ผ๋ ๊ฒ์ ์ฆ๋ช ํด์ฃผ๋ ๊ฒ์ด ๋๋ค.
๋ค์ ์๊ฐ์๋ SingleTon์ ๋ํด์ ์์๋ณด์.
๋๊ธ