공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!! 포스팅 내용이 찾아주신 분들께 도움이 되길 바라며 더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^
|
이번 포스팅에서는 스프링 DI 설정방법에 대해 알아보겠습니다.
총 4가지를 공부하겠습니다.
1. XML 로 DI 설정 : 이번 포스팅
2. Java 코드로 DI 설정
3. XML에 Java 혼용
4. Java에 XML 혼용
1. XML 로 DI 설정
준비 클래스 및 xml
저는 먼저 org.mon.altong.di.xml 이라는 패키지를 만들고
그 안에
Family, Running, Student, StudentInfo 라는 클래스를 만들었습니다.
그리고 src/main/resources 에는 두 개의 xml 파일을 만들었습니다.
xmlContext1.xml, xmlContext2.xml
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 45 46 | package org.mon.altong.di.xml; public class Family { String father; String mother; String sister; String brother; public Family(String father, String mother) { this.father = father; this.mother = mother; } public String getFather() { return father; } public void setFather(String father) { this.father = father; } public String getMother() { return mother; } public void setMother(String mother) { this.mother = mother; } public String getSister() { return sister; } public void setSister(String sister) { this.sister = sister; } public String getBrother() { return brother; } public void setBrother(String brother) { this.brother = brother; } } | cs |
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 59 60 | package org.mon.altong.di.xml; 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; } } | cs |
StudentInfo.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | package org.mon.altong.di.xml; public class StudentInfo { private Student student; public StudentInfo() { // TODO Auto-generated constructor stub } public Student getStudent() { return student; } public void setStudent(Student student) { this.student = student; } } | cs |
먼저 3개의 클래스를 만들었습니다.
각 클래스에는 필드들이 존재하고 해당 필드에 맞는 getter와 setter가 있습니다.
생성자도 있구요.
Family와 Student 클래스에는 값을 초기화하는데 생성자와 setter 를 모두 이용합니다.
생성자의 경우 <bean> 태그 안에서 값을 초기화 할 때는
<constructor-arg value=""/> 처럼 사용하구요.
setter는
<property name="" value=""/> 처럼 사용합니다.
그리고 생성자를 보면 ArrayList도 매개 변수로 사용되는데요.
ArrayList는 아래처럼
<constructor-arg>
<list>
<value>val1</value>
<value>val2</value>
</list>
</constructor-arg>
처럼 사용할 수 있습니다.
그리고 A 객체에서 B객체를 참조하고 싶을 때는
<bean id="studentInfo>....
에서 처럼
<property name="student" ref="student1"/> 이렇게
사용하면 됩니다.
ref="" 안의 값은 참조하고자 하는 <bean>의 id를 넣으시면 됩니다.
xmlContext1.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 | <?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="org.mon.altong.di.xml.Student"> <constructor-arg value="알통몬"/> <constructor-arg value="26"/> <constructor-arg> <list> <value>Workout</value> <value>Watching TV</value> </list> </constructor-arg> <property name="height" value="173"/> <property name="weight" value="72"/> </bean> <bean id="studentInfo" class="org.mon.altong.di.xml.StudentInfo"> <property name="student" ref="student1"/> </bean> </beans> | cs |
xmlContext2.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 | <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:c="http://www.springframework.org/schema/c" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="student3" class="org.mon.altong.di.xml.Student"> <constructor-arg value="근육몬"/> <constructor-arg value="27"/> <constructor-arg> <list> <value>Workout2</value> <value>Watching TV2</value> </list> </constructor-arg> <property name="height" value="175"/> <property name="weight" value="65"/> </bean> <bean id="family" class="org.mon.altong.di.xml.Family" c:father="빠더" c:mother="마떠" p:sister="씨스떠"> <property name="brother" value="부라더"/> </bean> </beans> | cs |
Running.java
꼭 한 개의 스프링 설정.xml 파일을 가져와야하는 건 아닙니다.
GenericXmlApplicationContext(매개 변수); 가
String... resources 문자열 배열로 되어 있어서
가져오고 싶은 설정파일을 전부 가져올 수 있습니다.
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 | public static void main(String[] args) { String config1 = "classpath:xmlContext1.xml"; String config2 = "classpath:xmlContext2.xml"; AbstractApplicationContext ctx = new GenericXmlApplicationContext(config1, config2); Student student1 = ctx.getBean("student1", Student.class); StudentInfo studentInfo = ctx.getBean("studentInfo", StudentInfo.class); Student student2 = studentInfo.getStudent(); if(student1.equals(student2)) { System.out.println("student1 == student2"); } Student student3 = ctx.getBean("student3", Student.class); 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.getFather()); System.out.println(family.getMother()); System.out.println(family.getSister()); System.out.println(family.getBrother()); ctx.close(); } } | cs |
직접 타이핑 해보시면서 따라해보시면 이해하기가 수월하실 거에요 ㅎㅎ
설명이 미약합니다 ㅠㅠㅠ
이해가 안되는 부분이 있으시다면 댓글달아주세요!
이상입니다.
감사합니다.
'Spring(스프링), Spring Boot(스프링부트), JSP' 카테고리의 다른 글
스프링(Spring) DI설정방법[3] : DI java in XML and DI xml in JAVA (0) | 2018.01.02 |
---|---|
스프링(Spring) DI설정방법[2] : DI in JAVA (0) | 2018.01.02 |
스프링(Spring) new 연산자를 이용한 객체생성과 DI를 이용한 객체생성의 관계 (0) | 2017.12.28 |
스프링(Spring) DI(의존관계주입) 이란? (0) | 2017.12.28 |
스프링(Spring) jdbcTemplate.queryForInt is Deprecated. 대체 방법 (1) | 2017.11.14 |