티스토리 뷰

일반적으로 class를 불러올때는 ClassName cl= new ClassName();을 사용하여 

생성을 한 뒤에 새로운 생성자를 통해서, 메서드를 실행시키거나 값을 넣어주지만 JSpring을 사용하면 

이런 번거로움을 줄일 수 있을 뿐만 아니라. 이 Class가 어디서 오는지 xml을 통해서 쉽게 확인이 가능하기 떄문에 

JSpring을 익히고 나면 훨씬 편하게 클래스를 호출하고 값을 전달 할 수 있습니다. 

 

Student.java

package com.student.exam;

import java.util.ArrayList;

public class Student {
	private String name;
	private int age;
	private ArrayList<String> hobbys;
	private double height;
	private double weight;
	
    public Student(String name,int age,ArrayList<String> hobbys) {
    	this.name=name;
    	this.age=age;
    	this.hobbys= hobbys;
    	
    }

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public ArrayList<String> getHobbys() {
		return hobbys;
	}

	public void setHobbys(ArrayList<String> hobbys) {
		this.hobbys = hobbys;
	}

	public double getHeight() {
		return height;
	}

	public void setHeight(double height) {
		this.height = height;
	}

	public double getWeight() {
		return weight;
	}

	public void setWeight(double weight) {
		this.weight = weight;
	}

}

StudentInfo.java

package com.student.exam;

public class StudentInfo {
private Student student;
public StudentInfo() {
	
}
public Student getStudent() {
	return student;
}
public void setStudent(Student student) {
	this.student = student;
}

}

 

위의 두 클래스는 그냥 값을 전달하기 위한 매개체 정도로만 생각해주세요. 

일반적으로 저희가 사용했던 클래스와 별반 다르지않습니다. 

Student는 정보를 입력하는 공간이고 StudentInfo는 학생의 정보를 담기위한 그릇이라고 생각하면 될 것 같습니다. 

일반적인 클래스는 깊게 생각 할 필요가 없고 xml파일로 넘어가서, 어떤 식으로 값을 전달하는지 볼게요 

 

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<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"
    xmlns:c="http://www.springframework.org/schema/c"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
 

<bean id="student1" class="com.student.exam.Student" c:name="박강균" c:age="12">

<!--  <constructor-arg><value>박강균</value></constructor-arg>
<constructor-arg><value>18</value></constructor-arg>-->
<constructor-arg><list>
<value>수영</value>
<value>축구</value>
<value>노래</value>
</list></constructor-arg>
<!-- <property name="height" value="182"/>
<property name="weight" valau=55/>-->
</bean>
<bean id="student2" class="com.student.exam.Student" c:name="박강균" c:age="12" >
<!--  <constructor-arg><value>박강균</value></constructor-arg>
<constructor-arg><value>18</value></constructor-arg>-->
<constructor-arg><list>
<value>수영</value>
<value>축구</value>
<value>노래</value>
</list></constructor-arg>
<!-- <property name="height" value="182"/>
<property name="weight" valau=55/>-->
</bean>
<bean id="student3" class="com.student.exam.Student">
<constructor-arg><value>누누</value></constructor-arg>
<constructor-arg><value>623</value></constructor-arg>
<constructor-arg><list>
<value>낮잠</value>
<value>먹기</value>
<value>자기</value>
</list></constructor-arg>
</bean>
<bean id="sutudentInfo1" class="com.student.exam.StudentInfo">
<property name="student">
<ref bean="student2"></ref></property>
</bean>


</beans>

 

 

 여기서 두 곳만 보면 어떤 식으로 데이터를 전달 하는 지 알 수 있습니다. 

 

<bean id="student1" class="com.student.exam.Student" c:name="박강균" c:age="12">

<!--  <constructor-arg><value>박강균</value></constructor-arg>
<constructor-arg><value>18</value></constructor-arg>-->
<constructor-arg><list>
<value>수영</value>
<value>축구</value>
<value>노래</value>
</list></constructor-arg>
<!-- <property name="height" value="182"/>
<property name="weight" valau=55/>-->
</bean>

 

 

bean id="내가 불러올때 쓰고싶은 id명" class="실제클래스가 있는 경로" c: 부분은 생성자 부분을 바로 입력할 수있게하는데, 이부분은 넘기고 아래 주석처리된 부분들을 포함해서 봐주세요 

Student클래스를 보시면, 생성자가 존재합니다. 그 안에는 세개의 값이 들어가요 

그래서 생성자의 벨류를 넣을 때는 해당 값을 전부 넣어줘야합니다. 

 

student의 생성자안에 들어가는 값들은 총세개이고 하나는 arraylist타입입니다. list타입을 받을 때 어떤식으로 밸류를 

받는 지도 아래의 문장을 참고하시면 좋을 것 같습니다. 

 

[STUDENT 기준 생성자 값을 넣을 때(값은 총 3개)]

<constructor-arg(생성자안에 값을 넣을 때 ><value>"name값이 들어갈 공간"</value></<constructor-arg>

<constructor-arg(생성자안에 값을 넣을 때 ><value>"age 값이 들어갈 공간 "</value></constructor-arg>

<constructor-arg(생성자안에 값을 넣을 때 >

<list(list타입으로)>

<value>"취미값이 들어갈 공간1"

</value>

<value>"취미값이 들어갈 공간2"

</value>

<value>"취미값이 들어갈 공간3"

</value>

</list>

</constructor-arg>

감이 좀 잡히셨나요 생성자같은경우에는 다음과 같이 값을 집어 넣습니다. 

그럼 값이 잘 들어갔는지 확인하기 위해 MainClass를 만들고 안에 있는 값들을 확인해봅니다. 

 

package com.student.exam;

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;

public class MainClass {

	public static void main(String[] args) {
		
		String configLocation1 = "classpath:add1.xml";
		String configLocation2 = "classpath:add2.xml";
		AbstractApplicationContext ctx 
		= new GenericXmlApplicationContext(configLocation1, configLocation2);
		
		Student student1 = ctx.getBean("student1", Student.class);
		System.out.println(student1.getName());	//홍길동
		System.out.println(student1.getHobbys());	// 수영, 요리
		
		StudentInfo studentInfo = ctx.getBean("sutudentInfo1", StudentInfo.class);
		Student student2 = studentInfo.getStudent();	//student1  == student2
		System.out.println(student2.getName());	//홍길동
		System.out.println(student2.getHobbys());	// 수영, 요리
		
		if(student1.equals(student2)) {
			System.out.println("student1 == student2");
		}
		
		Student student3 = ctx.getBean("student3", Student.class);
		System.out.println(student3.getName());
		
		if(student1.equals(student3)) {
			System.out.println("student1 == student3");
		} else {
			System.out.println("student1 != student3");
		}
		
		Family family = ctx.getBean("family", Family.class);
		System.out.println(family.getPapaName());
		System.out.println(family.getMamiName());
		System.out.println(family.getSisterName());
		System.out.println(family.getBrotherName());
		
		ctx.close();
		
	}
	
}

여기서 저희가 family의 정보를 가져오는 부분은 아직 만들지 않았기 때문에 

student안에 들어간 값들만 확인 하기 위해 아래의 코드만 남겨주세요.

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;

public class MainClass {

	public static void main(String[] args) {
		
		String configLocation1 = "classpath:add1.xml";
		
		AbstractApplicationContext ctx 
		= new GenericXmlApplicationContext(configLocation1);
		
		Student student1 = ctx.getBean("student1", Student.class);
		System.out.println(student1.getName());	//홍길동
		System.out.println(student1.getHobbys());	// 수영, 요리
        }
        }

이렇게 설정을 하고나면 클래스가 몇개가 있든 add1.xml에서 bean으로 정의만 되어있다면 모두 가져올 수 있습니다. 

값도 전부 다르게 설정할수도있어요 

ctx안에 xml파일의 정보를 모두 담아주고 

Student (클래스타입) student1(이름)=ctx.getBean("student1",Student.class);(ctx안에 있는 bean중에 ("student1"안에 저장되어있는값을 ,Student.class에 담아서 student1에 담겠다)

있는그대로 해석하면 이런 의미겠네요 

이제 student1이라는 아이 안에는 저희가 입력한 이름값과 나이 그리고 취미를 배열로 담은값이 들어갑니다. 

age는 출력문을 만들지 않아서 안보이겠죵? 

 다음과 같은 화면이 나온다면 성공입니다. 

이 구조를 너무 어렵게 생각하지 말고, 

원래는 여러곳에 있던 class들을 한곳에 묶어준다는 개념으로 이해하시면 좋을 것 같습니다. 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함