[직접 or 참조 DI설정]
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 | public class Student { private String name; private String age; private ArrayList<String> hobbies; private double height; private double weight; // 학생 정보에 관한 필드 값 private Student(String name, String age, ArrayList<String> hobbies) { this.name = name; this.age = age; this.hobbies = hobbies; // 그 중 name, age, hobbies만 생성자에 넣었다. } public String getName() { // getter, setter 지정 return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public ArrayList<String> getHobbies() { return hobbies; } public void setHobbies(ArrayList<String> hobbies) { this.hobbies = hobbies; } 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; } } | cs |
*
어렵지 않은 구조이다.
5개의 필드 값 선언 + 3개의 생성자 선언 + getter, setter 선언
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 | public class StudentInfo { private Student student; // student 변수 선언 public Student getStudent() { // student 변수에 대한 getter return student; } public void setStudent(Student student) { // student 변수에 대한 setter this.student = student; } public void getStudentInfo() { // StudentInfo 변수에 대한 getter, 학생정보 if(student != null) { System.out.println("이름 : " + student.getName()); System.out.println("나이 : " + student.getAge()); System.out.println("키 : " + student.getHeight()); System.out.println("체중 : " + student.getWeight()); System.out.println("-----------------------------------------"); } } } | cs |
*
student에 대한 getter와 setter가 있을 뿐
StudentInfo에 관한건 getStudentInfo() 밖에 없다.
Family.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 | public class Family { public String papaName; public String mamaName; public String sisterName; public String brotherName; // 가족이름에 대한 필드값 public Family(String papaName, String mamaName) { this.papaName = papaName; this.mamaName = mamaName; // 엄마, 아빠 이름만 생성자로 지정 } public String getPapaName() { // getter, setter 지정 return papaName; } public void setPapaName(String papaName) { this.papaName = papaName; } public String getMamaName() { return mamaName; } public void setMamaName(String mamaName) { this.mamaName = mamaName; } public String getSisterName() { return sisterName; } public void setSisterName(String sisterName) { this.sisterName = sisterName; } public String getBrotherName() { return brotherName; } public void setBrotherName(String brotherName) { this.brotherName = brotherName; } } | cs |
*
4개의 필드 값 + 2개의 생성자 + getter, setter 선언
appCTX_axample01.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <bean id="student1" class="com.yul.ex04_example01.Student"> <constructor-arg value="yul"/> <constructor-arg value="100세"/> <constructor-arg> <list> <value>노래부르기</value> <value>테니스</value> <value>런닝</value> </list> </constructor-arg> <property name="height" value="200"/> <property name="weight" value="80"/> </bean> <bean id="StudentInfo1" class="com.yul.ex04_example01.StudentInfo"> <property name="student"> <ref bean="student1"/> </property> </bean> | cs |
*
student1 : 이제 bean 매핑은 어렵지 않은 일이다.
Student 생성자에 name, age, hobbies만 생성되어 있으므로 차례대로 써주고
hobbies는 <list>안에서 <value>로 묶는다.
나머지 height, weight는 setter로 생성해주고 있으므로
property로 묶어주면 된다.
StudentInfo1 : ★ 주목해야 할 부분
<property name="student">
<-->
public void setStudent(Student student) {
this.student = student;
}
- xml에서 매핑할 때, Student가 setter 생성되어 있으니 property로 해준다.
<ref bean="student1"/>
<-->
private Student student;
- xml에서 매핑할 때, student1을 참조하여 초기화된다는 것을 꼭 기억하자.
appCTX_axample02.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <bean id="student3" class="com.yul.ex04_example01.Student"> <constructor-arg value="rim"/> <constructor-arg value="120세"/> <constructor-arg> <list> <value>걷기</value> <value>바보 표정짓기</value> <value>춤추기</value> </list> </constructor-arg> <property name="height" value="187"/> <property name="weight" value="67"/> </bean> <bean id="family1" class="com.yul.ex04_example01.Family"> <constructor-arg value="율아빠"/> <constructor-arg value="율엄마"/> <property name="sisterName" value="율언니"/> <property name="brotherName" value="율오빠"/> </bean> | cs |
*
student3부분은 student1부분 매핑과 똑같고 같은 클래스에서 객체 생성을 한 것 뿐이다.
family1부분도 그동안 계속 해온 부분과 같으므로 패스
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 24 25 26 27 28 29 30 31 32 33 34 35 | public class MainClass { public static void main(String[] args) { String configLoc01 = "classpath:appCTX_example01.xml"; String configLoc02 = "classpath:appCTX_example02.xml"; // xml 두개 선언 AbstractApplicationContext ctx = new GenericXmlApplicationContext(configLoc01, configLoc02); // ctx의 한 공간에 confingLoc01, configLoc02를 같이 있다는 의미가 된다. Student student1 = ctx.getBean("student1", Student.class); System.out.println("이름 : " + student1.getName()); System.out.println("나이 : " + student1.getAge()); // student1은 appCTX_example01.xml의 student1에서 직접 가져왔다. 결과값은 김나율, 28세이다. System.out.println("----------------------------------------------------"); StudentInfo studentInfo = ctx.getBean("StudentInfo1", StudentInfo.class); Student student2 = studentInfo.getStudent(); System.out.println("이름 : " + student2.getName()); System.out.println("나이 : " + student2.getAge()); // ★ studentInfo는 student1으로 초기화된 StudentInfo1이라는 값을 getBean으로 가져오고 있고 // student2에 그 값을 넣어주고 있다. 결국 결과값은 yul, 100세이다. // 동일한 결과 값과 equals메서드로 비교해도 같은 값이라고 나온다. System.out.println("----------------------------------------------------"); Student student3 = ctx.getBean("student3", Student.class); System.out.println("이름 : " + student3.getName()); System.out.println("나이 :" + student3.getAge()); // student3은 appCTX_example02.xml의 student3에서 직접 가져왔다. 결과값은 rim, 120세이다. System.out.println("----------------------------------------------------"); Family family = ctx.getBean("family1", Family.class); System.out.println(family.getPapaName()); System.out.println(family.getMamaName()); // family는 appCTX_example02.xml의 family1에서 가져왔다. // 원래 family예제는 namespaces활용을 위해 생성했는데 쓰지 않을 것 같아서 생략했다. } } | cs |
*
특히 참조하여 값을 가져오는 부분이
이해될 듯 말듯 볼 때마다 아리송해서
보고 또 봐야할 것 같다.
'프로그래밍 > Spring' 카테고리의 다른 글
Spring / Java를 통한 DI 설정방법 (0) | 2018.04.07 |
---|---|
Spring / DI 사용의 장점 (0) | 2018.04.07 |
Spring / constructor-arg를 통한 의존주입 (0) | 2018.04.07 |
Spring / xml 매핑하기 (0) | 2018.04.07 |
Spring의 필요성 / Spring을 사용 했을 때 (0) | 2018.04.07 |