━━━━ ◇ ━━━━
Spring/Spring 수업

Spring 06. 스프링 맛보기 2 Student


우선 새 프로젝트를 생성하자.


이번에도 Simple Spring Maven 을 선택 하면 되.


프로젝트가 생성되면 클래스 들이 있어야 겠지?



Main 클래스를 생성하고



학생 클래스도 생성해 줘야지.


지난 포스트와 마찬가지로 이 클래스는 이미 만들어져 있는 걸 받아왔다고 가정할게.


이렇게 가정하는 이유는 스프링이 기존의 클래스들을 어떻게 재활용 하는지 보여주기 위해서 인것 같아.


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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package com.aristatait.spring;
 
//기존에 있던 클래스라고 가정
public class Student {
    //멤버변수
    private String name;
    private String age;
    private String gradeNum;
    private String classNum;
    
    //생성자
    public Student(String name, String age, String gradeNum, String classNum) {
        super();
        this.name = name;
        this.age = age;
        this.gradeNum = gradeNum;
        this.classNum = classNum;
    }
 
    //Getter Setter
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String getAge() {
        return age;
    }
 
    public void setAge(String age) {
        this.age = age;
    }
 
    public String getGradeNum() {
        return gradeNum;
    }
 
    public void setGradeNum(String gradeNum) {
        this.gradeNum = gradeNum;
    }
 
    public String getClassNum() {
        return classNum;
    }
 
    public void setClassNum(String classNum) {
        this.classNum = classNum;
    }
    
    
    
    
    
}
 
cs



위의 Student.java 파일을 아래와 같이 재활용 해 봤어.


StudentInfo.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
package com.aristatait.spring;
 
//has a 관계로 클래스 생성
public class StudentInfo {
 
    private Student student; // <== 여기 중요 !!
    
    public StudentInfo(Student student) {
        super();
        this.student = student;
    }
 
    public void getStudentInfo(){
        if(student!=null){
            System.out.println("이름 : " + student.getName());
            System.out.println("나이 : " + student.getAge());
            System.out.println("학년 : " + student.getGradeNum());
            System.out.println("반 : " + student.getClassNum());
            System.out.println("==============================");
        }
    }
 
    public void setStudent(Student student) {
        this.student = student;
    }
    
    
}
 
cs




스프링에서 클래스를 재활용하는 방법은 자바와 달리 포함관계(Have a 관계 or Has a 관계)를 사용해.


StudentInfo.java 소스에서 6번 라인을 보면 Student 클래스 타입의 변수 student 가 선언되었어.


보통의 자바 프로그래밍에서 위와 같은 변수를 사용하기 위해서는 생성자 안에 


student = new Student(); 와 같은 문장이 필요 했을 거야.


하지만 스프링에서는 객체의 생성을 xml 리소스에 위임(?) 하기 때문에 위와 같은 문장이 필요가 없대.


8번 라인을 보면 StudentInfo 생성자의 매개변수로 Student 클래스가 사용되는걸 볼 수 있어.


이로 인해서 StudentInfo 클래스는 Student 클래스의 Properties 를 포함하는 클래스가 된것이지.


이제 좀 전에 말한 xml 리소스 파일을 만들자.



리소스 파일은 리소스 폴더에 만드는게 좋아.


적당히 이름을 만들어 주고 Finish !



리소스 파일을 열어서 하단의 Overview 탭을 선택하면 위와 같은 화면을 볼 수 있을 거야.


New Bean 버튼을 눌러서 



아이디와 클래스를 입력해 주면 되.


여기서 클래스는 Browse 를 클릭하여 검색을 하면 쉽게 입력 할 수 있어.



대충 느낌 오지??


이 방법으로 Student1, Student2, StudentInfo Bean을 생성하였어.


참고로 Student1 과 Student2 의 클래스는 둘다 Student 야.

 

하단의 Source 탭을 선택해 내용물(?)을 채워 주자.


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
24
25
26
27
28
29
30
31
32
33
<?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.aristatait.spring.Student">
        <constructor-arg>
            <value>홍길동</value>
        </constructor-arg>
        <constructor-arg>
            <value>10살</value>
        </constructor-arg>
        <constructor-arg>
            <value>3학년</value>
        </constructor-arg>
        <constructor-arg>
            <value>2반</value>
        </constructor-arg>
    </bean>
    <bean id="student2" class="com.aristatait.spring.Student">
        <constructor-arg value="홍삼삼"/>
        <constructor-arg value="9살"/>
        <constructor-arg value="2학년"/>
        <constructor-arg value="1반"/>
    </bean>
    <bean id="studentInfo" class="com.aristatait.spring.StudentInfo">
        <constructor-arg>
            <ref bean="student1"/>
        </constructor-arg>
    </bean>
</beans>
 
cs




일부러 Student1 과 Student2의 내용물(?)을 채우는 방법을 달리 해봤어.


하지만 둘다 결과는 같아.


편한 방법을 사용하면 되.


그리고 StudentInfo 는 Student1 의 내용물을 ref(reference : 참고하다) 하고 있어.


아마도 StudentInfo 를 동작시키면 Student1 의 내용물(?)이 나올것 같지?


자 이제 파일을 실행해 볼게


Main 클래스에 코드를 작성해야 겠지?


MainClass.java 소스코드


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




이전 포스트와 동일하게 클래스패스를 잡아주고,


클래스패스에서 bean 들을 가져와서 객체를 생성해 줬어.


클래스 내부에 만들어져 있던 메소드를 호출해 보면...



짜잔 !!!


뭐 대충 이런것 이라고 하네...


이 포스트는 여기까지 그럼 ㅂㅂ2

COMMENT