記錄

Spring) .xml을 통한 변수값 설정, 생성자 활용 본문

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를 사용한다.



Comments