Spring
โญSpring์ฌ์ฉํ์ง ์์ DI
package spring.di;
public class Program {
public static void main(String[] args) {
Exam exam = new NewlecExam(1,2,3,4);
ExamConsole console = new GridExamConsole();
console.setExam(exam); // DI
console.print();
}
}
>>>
โโโโโโโโโโโฌโโโโโโโโโโ
โ total โ avg โ
โโโโโโโโโโโผโโโโโโโโโโค
โ 10 โ 2.50 โ
โโโโโโโโโโโดโโโโโโโโโโ
spring์ ์ฌ์ฉํ์ง ์๊ณ exam
์ด๋ผ๋ dependecy๋ฅผ ๋ง๋ค์ด์ console
์ injectionํ ํ printํ๋ ์ฝ๋์ด๋ค.
exam์ด๋ผ๋ ๊ฐ์ฒด๊ฐ ๋ฐ๋๊ฑฐ๋ console์ด ๋ฐ๋๋ ๊ฒฝ์ฐ ์ ์ ์ธ ์ฝ๋๋ก ๋ฐ์ ๋์๊ฒ ๋ณด๋ค,
์ค์ ํ์ผ๋ก ๋นผ์ ์ฒ๋ฆฌํ๋๊ฒ ๋ฐ๋์งํ๋ค ๐ Spring์ด ๋์์ค
โญDI ์ง์์ ์์ฑ
DI ์ง์์๋ฅผ ์์ฑํ๋ฉด ๋ถํ์ ์์ฑํ๊ณ ์กฐ๋ฆฝ(setExam
)ํด์ ๋ฐํํด์ค๋ค!
- ์ง์์(setting.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">
<!--Exam exam = new NewlecExam(1,2,3,4); -->
<bean id="exam" class="spring.di.entity.NewlecExam">
<!-- exam.setKor(10) -->
<!-- exam.setEng(20) -->
<!-- exam.setMath(10) -->
<!-- exam.setCom(10) -->
<property name="kor" value="10"/>
<property name="eng" value="20"/>
<property name="math" value="10"/>
<property name="com" value="10"/>
</bean>
<!--ExamConsole console = new GridExamConsole(); -->
<bean id="console" class="spring.di.ui.InlineExamConsole">
<!--console.setExam(exam); -->
<property name="exam" ref="exam"/>
</bean>
</beans>
<bean />
ํ๊ทธ๋ฅผ ์ด์ฉํด์ ์์ฑํ ๊ฐ์ฒด๋ฅผ ์ง์ํ๋ค.
<bean id="๋ณ์๋ช
" class="ํจํค์ง๋ช
(์ค๋ณต์ ํผํ๊ธฐ ์ํด์) + ๊ฐ์ฒดํ ํ ํด๋์ค๋ช
" />
injection์ง์ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ
1.setter injection
<property name="" ref="" ๋๋ value="">
๋ฅผ ์ฌ์ฉํ์ฌ setter๋ฅผ ์ด์ฉํ injection์ ์ง์ํ ์ ์๋ค.
์ด๋<property>
ํ๊ทธ ์ name์console.setExam(exam)
์ setExam์์ set์ ์ง์ฐ๊ณ Exam์ E๋ฅผ ์๋ฌธ์๋ก ๋ฐ๊พผexam
์ผ๋ก ์์ฑํด์ผ ํ๋ค.(๊ท์น)
2.์์ฑ์ injection
<constructor-arg index="" value="" />
๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ์๋ฅผ ์ด์ฉํ injection์ ์ง์ํ ์ ์๋ค.<!--Exam exam = new NewlecExam(10,20,40,30); --> <bean id="exam" class="spring.di.entity.NewlecExam"> <constructor-arg index="0" type="int" value="10" /> <constructor-arg index="1" type="int" value="20" /> <constructor-arg index="com" type="int" value="30" /> <constructor-arg index="math" type="int" value="40" /> </bean>
์ค์ ํ์ผ ์ฒ๋ฆฌ๊ธฐ๋ฅผ setting.xml์ ์ถ๊ฐ(namespace์์ p๋ฅผ ์ถ๊ฐ)ํ๋ฉด ์ข ๋ ์ฝ๊ฒ ํ ์ ์๋ค.
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="exam" class="spring.di.entity.NewlecExam" p:kor="10" p:eng="10"/>
</beans>
โญSpring์ฌ์ฉํ DI
package spring.di;
import org.springframework.context.ApplicationContext;
...
public class Program {
public static void main(String[] args) {
ApplicationContext context
= new ClassPathXmlApplicationContext("spring/di/setting.xml");
//ExamConsole console = (ExamConsole) context.getBean("console");
ExamConsole console = context.getBean(ExamConsole.class);
console.print();
}
}
ApplicationContext (maven project๋ก ๋ฐ๊ฟ์ pom.xml์ dependency๋ฅผ ์ถ๊ฐํ ํ importํด์ผ ํ๋ค) ๋ฅผ ์ด์ฉํ์ฌ ์์ฑํ ์ง์์๋ฅผ ์ฝ์ด์ฌ ์ ์๋ค.
ApplicationContext๋ ์ธํฐํ์ด์ค์ด๊ณ , ์ฌ๋ฌ ์ข ๋ฅ๊ฐ ์๋ค.
- ClassPathXmlApplicationContext
- FileSystemXmlApplicationContext
- XmlWebApplicationContext
- AnnotationConfigApplicationContext
- getBeanํ๋ ๋ฐฉ๋ฒ ๋ ๊ฐ์ง
์ด๋ฆ : context.getBean("console")๋ก ๊ฐ์ ธ์ค๋ฉด Objectํ์ผ๋ก ๋ฐํ๋๋ฏ๋ก casting์ ํด์ผํ๋ค
์๋ฃํ : context.getBean(ExamConsole.class)๋ก ๊ฐ์ ธ์ค๋ฉด casting์ด ํ์์๋ค
'๐๋ฐฑ์๋ : Backend' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring]@Autowired๋์๋ฐฉ์๊ณผ @Qualifier (0) | 2023.06.19 |
---|---|
[Spring]์ด๋ ธํ ์ด์ ์ ์ด์ฉํ ๋ ์ฅ์ ๊ณผ @Autowired๋ฅผ ์ด์ฉํ DI (0) | 2023.06.19 |
[Spring]์ฝ๋ ์ ์์ฑ๊ณผ DI (0) | 2023.06.19 |
[Spring] ์์ (0) | 2023.06.19 |
[Spring] DI์ IoC Container (0) | 2023.06.19 |