# setter은 property 태그를 생성자는 constructor-arg 태그를 사용한다.

# DI의 활용 (construct-생성자 이용하기)

Student.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package com.javalec.ex;
 
public class Student {
    private String name;
    private int stNum;
    private int age;
    
    public Student(String name, int stNum, int age) { // 생성자
        // TODO Auto-generated constructor stub
        this.name = name;
        this.stNum = stNum;
        this.age = age;
    }
 
 
    public void setName(String name) { //setter
        this.name = name;
    }
    public void setStNum(int stNum) {
        this.stNum = stNum;
    }
    public void setAge(int age) {
        this.age = age;
    }
 
 
    public String getName() {
        return name;
    }
    public int getStNum() {
        return stNum;
    }
    public int getAge() {
        return age;
    }
    
}
 
cs

 

 StudentInfo.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package com.javalec.ex;
 
public class StudentInfo {
 
    private Student student;
    
    public StudentInfo(Student student) { // 생성자
        // TODO Auto-generated constructor stub
        this.student = student;
    }
    
    public void setStudent(Student student) { // setter
        this.student = student;
    }
 
    public void getStudentInfo() {
        System.out.println("name : "+student.getName());
        System.out.println("student number : "+student.getStNum());
        System.out.println("age : "+student.getAge());
    }
}
 
cs

 

 MainClass.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package com.javalec.ex;
 
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
 
public class MainClass {
    public static void main(String[] args) {
        String configLoc = "classpath:applicationCTX.xml";
        AbstractApplicationContext ctx = new GenericXmlApplicationContext(configLoc);
        StudentInfo studentInfo = ctx.getBean("studentInfo", StudentInfo.class);
        
        studentInfo.getStudentInfo();
        
        Student student = ctx.getBean("student2", Student.class);
        studentInfo.setStudent(student);
        studentInfo.getStudentInfo();
    }
}
 
cs

 

applicationCTX.xml 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?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="student1" class="com.javalec.ex.Student">
        <constructor-arg><value>sangeun lee</value></constructor-arg>
        <constructor-arg><value>201301674</value></constructor-arg>
        <constructor-arg><value>24</value></constructor-arg>
    </bean>
    
    <bean id="student2" class="com.javalec.ex.Student">
        <constructor-arg value="이상은"></constructor-arg>
        <constructor-arg value="201301674"></constructor-arg>
        <constructor-arg value="24"></constructor-arg>
    </bean>
    
    <bean id="studentInfo" class="com.javalec.ex.StudentInfo">
        <constructor-arg>
            <ref bean = "student1"/>
        </constructor-arg>
    </bean>
</beans>
 
cs

 

 bean이 두 가지가 있는데 "student1"로 "studentInfo"의 생성자로 설정하고 MainClass.java 파일을 보면 마지막에 setter방법을 이용하여 "student2"를 설정한다.

=> 생성자와 setter방법의 차이를 확인할 수 있다.

 

+ Recent posts