Web/Spring framework
Spring) .xml을 통한 변수값 설정, 생성자 활용
surhommejk
2018. 4. 28. 11:25
public class JobExecute {
public JobExecute(String first , int second) {
System.out.println("String,int");
}
public JobExecute(String first , long second) {
System.out.println("String,long");
}
public JobExecute(String first , String second) {
System.out.println("String,String");
}
private ArticleDao articledao;
public ArticleDao getArticledao() {
return articledao;
}
public void setArticledao(ArticleDao articledao) {
this.articledao = articledao;
System.out.println("ArticleDao :" + this.articledao);
}
private int data;
public void setData(int data) {
this.data = data;
System.out.println("data value :" + this.data);
}
}
<?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">
<!--
IOC 컨테이너 (Spring 전용 메모리 공간) 안에 생성될 객체를 만들고 조립(의존)관계 설정 하는 파일
JobExecute jobexecute = new JobExecute("hong",100L); //parameter 처리
ArticleDao articledao = new ArticleDao();
jobexecute.setArticledao(articledao);
jobexecute.setData(500)
1.<constructor-arg> 순서를 인정
2.<value> 값에 Type 이 명시되지 않으면 Default >> String
-->
<bean id="jobexecute" class="DI_08_Spring.JobExecute">
<!-- 생성자 파라미터 설정 -->
<constructor-arg>
<value>hong</value>
</constructor-arg>
<!-- 생성자 파라미터 설정 -->
<constructor-arg>
<value type="long">100</value>
</constructor-arg>
<!-- articledao라는 변수의 값을 설정 -->
<!-- jobexecute 클래스에 setter가 구현되어 있지 않으면 작동 X -->
<property name="articledao">
<ref bean="articleDAO" />
</property>
<!-- data라는 변수의 값을 설정 -->
<!-- jobexecute 클래스에 setter가 구현되어 있지 않으면 작동 X -->
<property name="data">
<value>500</value>
</property>
</bean>
<!-- 이게 bean 설정 되어 있어야 위에서 articledao에서 ref값으로 설정 가능 -->
<bean id="articleDAO" class="DI_08_Spring.ArticleDao"></bean>
</beans>
public class Program {
public static void main(String[] args) {
/*
JobExecute jobexecute = new JobExecute("hong",100L);
//생성자 주입 (overloading 처리 가능 : Spring 에서)
ArticleDao articledao = new ArticleDao();
jobexecute.setArticledao(articledao); //setter 주입 (주소)
jobexecute.setData(500); //setter 주입 (값)
*/
ApplicationContext context =
new GenericXmlApplicationContext("classpath:DI_08_Spring/DI_08.xml");
}
}
<정리>
1. bean으로 설정할 클래스에 setter가 없으면 .xml에서 property 값 설정이 불가능하다
2. 다수의 오버로드된 생성자들이 존재하더라도 하나의 생성자를 특정할 필요 없이 .xml에서 <constructor-arg> 설정을 잘 하면 이에 맞는 생성자가 작동하게 된다.
'설정을 잘 한다'는 뜻은 생성자에 파라미터로 설정된 타입과 동일한 타입의 파라미터들을 <constructor-arg>를 통해 세팅한다는 것을 의미한다.
3. .xml에서 Reference Type의 변수를 property로 설정 해줄 때에는 ref를 사용한다.
vs
.xml에서 Primitive Type의 변수를 property로 설정 해줄 때에는 value를 사용한다.