[xml과 Java를 같이 사용하는 방법]
1. xml파일에 Java파일을 포함시켜 사용하는 방법
2. JAva파일에 xml파일을 포함시켜 사용하는 방법
AbstractApplicationContext ctx
= new AnnotationConfigApplicationContext(AppConfig02.class);
: class파일을 파싱할 때는 AnnotationConfigApplicationContex를 이용하고 있다.
AbstractApplicationContext ctx
= new GenericXmlApplicationContext("classpath:ctx_example01.xml");
: xml파일을 파싱할 때는 GenericXmlApplicationContext을 이용하고 있다.
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 int age; private ArrayList<String> hobbies; private double height; private double weight; public Student(String name, int age, ArrayList<String> hobbies) { this.name = name; this.age = age; this.hobbies = hobbies; } 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> 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 |
*
예제 1,2에 공통된 Student부분. 이제 딱히 설명을 안 해도 하도 반복해서 다 외울 지경.
예제1. xml파일에 Java파일을 포함시켜 사용하는 방법
AppConfig01.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | @Configuration public class AppConfig01 { @Bean public Student student1() { ArrayList<String> hobbies = new ArrayList<String>(); hobbies.add("노래하기"); hobbies.add("춤추기"); Student student = new Student("김희연", 28, hobbies); student.setHeight(187); student.setWeight(67); return student; } } | cs |
*
@Configuration과 @Bean을 사용해서
스프링 DI를 이용할 수 있는 객체를 생성해주었다.
AppConfig02.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <context:annotation-config/> <bean class="com.yul.ex04_example.AppConfig01"/> <bean id="student2" class="com.yul.ex04_example.Student"> <constructor-arg value="김윤미"/> <constructor-arg value="22"/> <constructor-arg> <list> <value>필라테스</value> <value>요가</value> </list> </constructor-arg> <property name="height" value="173"/> <property name="weight" value="49"/> </bean> </beans> | cs |
*
<context:annotation-config/>
<bean class="com.yul.ex04_example.AppConfig01"/>
이 부분은 AppConfig01.java파일을 xml안에 포함시켜서 사용하겠다는 의미이다.
이로써 김희연 학생에 관련된 내용이 xml에 귀속되었다.
namespace에 context를 체크해주는 것도 잊지말아야 한다.
MainClass01.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 | public class MainClass01 { public static void main(String[] args) { AbstractApplicationContext ctx = new GenericXmlApplicationContext("classpath:ctx_example01.xml"); Student student1 = ctx.getBean("student1", Student.class); System.out.println("이름 : " + student1.getName()); System.out.println("나이 : " + student1.getAge()); System.out.println("취미 : " + student1.getHobbies()); System.out.println("신장 : " + student1.getHeight()); System.out.println("체중 : " + student1.getWeight()); // AppConfig01.java System.out.println("==================================="); Student student2 = ctx.getBean("student2", Student.class); System.out.println("이름 : " + student2.getName()); System.out.println("나이 : " + student2.getAge()); System.out.println("취미 : " + student2.getHobbies()); System.out.println("신장 : " + student2.getHeight()); System.out.println("체중 : " + student2.getWeight()); // ctx_example01.xml System.out.println("==================================="); ctx.close(); } } | cs |
*
그러면 MainClass에서도 당연히 xml파일을 ctx에 담아야 한다.
그 상태로 student1을 겟하면 ctx_example01.xml에 담긴 AppConfig01.java인 김희연 학생 내용이 출력되고
student2를 겟하면 ctx_example01.xml에 담긴 김윤미 학생 내용이 출력된다.
---------------------------------------------------------------------------------------------------------------
예제2. Java파일에 xml파일을 포함시켜 사용하는 방법
ctx_example02.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <bean id="student2" class="com.yul.ex04_example.Student"> <constructor-arg value="정민규"/> <constructor-arg value="27"/> <constructor-arg> <list> <value>테니스</value> <value>축구</value> </list> </constructor-arg> <property name="height" value="185"/> <property name="weight" value="82"/> </bean> </beans> | cs |
*
student와 매핑하여 정민규 학생 정보를 입력해주었다.
AppConfig02.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | @Configuration @ImportResource("classpath:ctx_example02.xml") public class AppConfig02 { @Bean public Student student1() { ArrayList<String> hobbies = new ArrayList<String>(); hobbies.add("성질내기"); hobbies.add("애교부리기"); Student student = new Student("김신비", 32, hobbies); student.setHeight(180); student.setWeight(66); return student; } } | cs |
*
이번에는 Java파일 안에 xml파일을 포함시키는 방법을 선택했다.
이로써 정민규 학생의 정보가 java파일 안에 귀속되었다.
@ImportResource("classpath:ctx_example02.xml")
어노테이션을 사용하고 xml파일의 주소를 입력해주면 된다.
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 | public class MainClass02 { public static void main(String[] args) { AbstractApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig02.class); Student student1 = ctx.getBean("student1", Student.class); System.out.println("이름 : " + student1.getName()); System.out.println("나이 : " + student1.getAge()); System.out.println("취미 : " + student1.getHobbies()); System.out.println("신장 : " + student1.getHeight()); System.out.println("체중 : " + student1.getWeight()); System.out.println("==================================="); Student student2 = ctx.getBean("student2", Student.class); System.out.println("이름 : " + student2.getName()); System.out.println("나이 : " + student2.getAge()); System.out.println("취미 : " + student2.getHobbies()); System.out.println("신장 : " + student2.getHeight()); System.out.println("체중 : " + student2.getWeight()); ctx.close(); } } | cs |
*
마찬가지로 MainClass에서는 자바파일로 ctx를 파싱해주어야 한다.
여기서 확실히 해둘 것은 위에서 xml 파일을 파싱할 때는 GenericXmlApplicationContext 메서드를 이용하지만
java 파일을 파싱할 때는 AnnotationConfigApplicationContext를 이용해야 한다.
그 상태로 student1을 겟하면 AppConfig02.java에서 해당내용인 김신비 학생 정보가 출력될 것이고
student2를 겟하면 AppConfig02.java에서 임폴트 어노테이션으로 포함시킨 ctx_example02.xml의
정민규 학생 정보가 출력될 것이다.
'프로그래밍 > Spring' 카테고리의 다른 글
Spring / 스프링 빈의 생명 주기(life cycle) (0) | 2018.04.07 |
---|---|
Spring / 스프링 컨테이너의 생명주기(lifecycle) (0) | 2018.04.07 |
Spring / Java를 통한 DI 설정방법 (0) | 2018.04.07 |
Spring / DI 사용의 장점 (0) | 2018.04.07 |
Spring / 직접 or 참조 DI설정 (0) | 2018.04.07 |