Spring(스프링), Spring Boot(스프링부트), JSP

스프링(Spring) DI설정방법[1] : DI in XML

알통몬_ 2017. 12. 28. 17:30
반응형


공감 및 댓글은 포스팅 하는데

 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 

도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 

만들어 나가겠습니다^^

 


이번 포스팅에서는 스프링 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


직접 타이핑 해보시면서 따라해보시면 이해하기가 수월하실 거에요 ㅎㅎ


설명이 미약합니다 ㅠㅠㅠ

이해가 안되는 부분이 있으시다면 댓글달아주세요!

이상입니다.

감사합니다.

반응형