본문 바로가기
Web/Spring

Spring(2)

by 미티치 2016. 5. 11.

『 목차 』


- DI 사용방식 3가지

1) XML을 사용한 DI 사용

2) Java를 사용한 DI 사용

3) XML과 Java를 둘다 사용한 DI 사용






스프링은 "생성과 조립"

 

아직까진 DI의 사용에 대해 장점을 많이 느끼지 못하지만, DI를 왜 사용할까에 대해 생각해본다면 우선적으로 DI를 사용하면 유지보수가 쉬워진다. 프로젝트 규모가 커지고 유지보수가 길어질수록 DI의 장점을 많이 체감할 수 있을것이다. (단편적으로 생각해보면 xml파일에서만 값을 변경해주면 되니까!)


왜 DI가 편리한지 알아보는 예제를 봐야할것같아!!!!!



DI를 사용하는 방법 3가지가 있는데

 

1.  XML 파일을 이용한 DI 설정방법

2.  JAVA를 이용한 DI 설정방법 (어노테이션)

3.  XML, JAVA를 이용한 DI 설정 방법

 



 

1. XML 파일을 이용한 DI 설정방법

 

Pencil이라는 interface가 있고 이 interface를 implements한 객체 Pencil4B, Pencil6B, Pencil6BEraser가 있다고하면, Pencil을 통해 동적바인딩으로 MainClass에서는 각 객체에 쉽게 접근할 수 있어.

이 예제는 DI사용에 따른 장점을 보여줄거야.

 

△ 예제)

src/main/java

- com/Pencil/ex

-MainClass.java

-Pencil.java

-Pencil4B.java

-Pencil6B.java

-Pencil6BEraser.java

- com/main/resources

-applicationCTX.xml

 

 

[ Pencil.java ]

1
2
3
4
5
package com.Pencil.ex;
 
public interface Pencil {
    public void use();
}
cs

 

[ Pencil4B ]

1
2
3
4
5
6
7
8
9
10
11
package com.Pencil.ex;
 
public class Pencil4B implements Pencil{
 
    @Override
    public void use() {
        System.out.println("4B 굵기로 씁니다");
        
    }
    
}
cs
[ Pencil6B ]
1
2
3
4
5
6
7
8
9
10
package com.Pencil.ex;
 
public class Pencil6B implements Pencil{
 
    @Override
    public void use() {
        System.out.println("6B 굵기로 씁니다");
        
    }
}
cs

[ Pencil6BEraser ]

1
2
3
4
5
6
7
8
9
10
package com.Pencil.ex;
 
public class Pencil6BEraser implements Pencil{
 
    @Override
    public void use() {
        System.out.println("6B 지우개");
        
    }
}
cs

 

[ MainClass ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package com.Pencil.ex;
 
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
 
public class MainClass {
 
    public static void main(String[] args) {
        //Bean의 경로 설정
        AbstractApplicationContext ctx = new GenericXmlApplicationContext("classpath:applicationCTX.xml");
        //Bean에서 "pencil"이라는 변수의 값을 getBean메소드를 통해서 가지고와서
        //Pencil pencil에 대입할거야
        Pencil pencil = ctx.getBean("pencil", Pencil.class);
        
        //이 pencil을 통해서 동적바인딩이 가능
        //-> pencil 인터페이스를 implements한 객체들(4b,6b,6bEraser)을 xml에서만 빈을 바꿔주면 쉽게 동적바인딩 가능(편리!)
        pencil.use();
        
        ctx.close();
    }
}
cs

 

[ applicationCTX.xml ]

1
2
3
4
5
6
7
8
<?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="pencil" class="com.Pencil.ex.Pencil6BEraser">
</bean>
</beans>
cs

 


출력 결과 및 분석


6B 지우개


- 여기서 applicationCTX.xml에서 빈을 어떤 객체를 생성하느냐에 따라서 MainClass에서는 코드를 수정하지 않아도 쉽게 표현하고자하는 객체를 오버라이딩을 통해 접근하여 출력할 수 있지.


- 4B를 출력하고싶으면 <bean id="pencil" class="com.Pencil.ex.Pencil4B">로 해주면 되겠지?

 

 

 

 


자. 또다른 예제를 보자. 이번에는 configLocation의 경로를 두개로 지정하는 경우야. 여태까지는 xml파일의 경로를 하나만 지정했지만 xml파일 경로를 두개 이상으로 지정하는 예제를 보여줄게

 

△ 예제 )

src/main/java

- com/familly/ex

-MainClass.java

-Familly.java

-Student.java

-StudentInfo.java

- com/main/resources

-applicationCTX1.xml

-applicationCTX2.xml

 

[ Familly ]

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
package com.familly.ex;
public class Familly {
 
    String papaName;
    String mamaName;
    String sisterName;
    String brotherName;
    
    public Familly(String papaName, String mamaName){
        this.papaName = papaName;
        this.mamaName = mamaName;
    }
 
    public String getPapaName() {
        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

 

[ Student ]

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
package com.familly.ex;
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 ] 

1
2
3
4
5
6
7
8
9
10
11
package com.familly.ex;
public class StudentInfo {
    
    private Student student;
    
    public StudentInfo(){    }
    public void setStudent(Student student){
        this.student = student;                        }
    public Student getStudent(){
        return student;                                    }
}
cs

 

 

[ MainClass ]

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
package com.familly.ex;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
 
public class MainClass {
    public static void main(String[] args) {
        String configLocation1 = "classpath:applicationCTX1.xml";
        String configLocation2 = "classpath:applicationCTX2.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("studentInfo1", StudentInfo.class);
        Student student2 = studentInfo.getStudent();
        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("stu1 == stu3");
        }else{
            System.out.println("stu1 != stu3");                        }
        
        Familly familly = ctx.getBean("familly", Familly.class);
        System.out.println(familly.getPapaName());
        System.out.println(familly.getMamaName());
        System.out.println(familly.getSisterName());
        System.out.println(familly.getBrotherName());
        
        ctx.close();
    }
}
 
cs

 

여기서 경로는 applicationCTX1.xml과 applicationCTX2.xml로 지정이 되어있으니까 applicationCTX1.xml에서는 student1,2,3 객체를 설정해주고 applicationCTX2.xml에서는 familly 객체를 설정해줄거야.

 

 

[ applicationCTX1.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
30
31
32
33
34
35
36
37
38
39
40
41
42
<?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="com.familly.ex.Student">
        <constructor-arg>
            <value>홍길동</value>
        </constructor-arg>
        <constructor-arg>
            <value>20</value>
        </constructor-arg>
        <constructor-arg>
            <list>
                <value>수영</value>
                <value>요리</value>
            </list>
        </constructor-arg>
    </bean>
 
    <bean id="studentInfo1" class="com.familly.ex.StudentInfo">
        <property name="student">
            <ref bean="student1"></ref>
        </property>
    </bean>
 
    <bean id="student3" class="com.familly.ex.Student">
        <constructor-arg>
            <value>홍길자</value>
        </constructor-arg>
        <constructor-arg>
            <value>21</value>
        </constructor-arg>
        <constructor-arg>
            <list>
                <value>농구</value>
                <value>배구</value>
            </list>
        </constructor-arg>
    </bean>
 
</beans>
cs

 

[ applicationCTX2.xml ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?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="familly" class="com.familly.ex.Familly">
        <constructor-arg>
            <value>홍아빠</value>
        </constructor-arg>
        <constructor-arg>
            <value>홍엄마</value>
        </constructor-arg>
        <property name="sisterName" value="홍누나"></property>
        <property name="brotherName" value="홍오빠"></property>
    </bean>
 
</beans>
cs

 

 

 

이때!!!! applicationCTX2.xml의 문법은 위와같은 방식말고 하나 더있음!!

+ applicationCTX2.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
<?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="familly" class="com.familly.ex.Familly">
    <constructor-arg>
        <value>홍아빠</value>
    </constructor-arg>
    <constructor-arg>
        <value>홍엄마</value>
    </constructor-arg>
    <property name="sisterName" value="홍누나"></property>
    <property name="brotherName" value="홍오빠"></property>
</bean>
-->
<bean id="familly" class="com.familly.ex.Familly" c:papaName="홍아빠" c:mamaName="홍엄마" p:sisterName="홍누나">
    <property name="brotherName" value="홍오빠"></property>
</bean>
 
</beans>
 
cs

이 코드는 위에서 4,5 줄을 꼭 참고해야해. 이부분이 없으면 20번째줄 같은 문법을 사용할 수 없어.

 

 

 출력 결과 및 분석

 

홍길동

[수영, 요리]

홍길동

[수영, 요리]

student1==student2

홍길자

stu1 != stu3

홍아빠

홍엄마

홍누나

홍오빠

 

- MainClass를 보면 applicationCTX1.xml과 applicationCTX2.xml 이렇게 두개의 경로가 있다. 두개의 경로를 한번에 지정해서 각 xml에서 빈을 나누어서 선언해도 MainClass에서 알아서 잘 불러온다.


 

 

 

 



 

2. JAVA를 이용한 DI 설정방법

 

1번 방식에서는 xml파일에서 DI 설정을 해주었지만, 이번에는 JAVA파일로 DI를 설정할거야. 예제를 보면서 설명할게

이번에는 com/main/resources에 xml파일을 만들지 않고 생성할 객체와 같은 패키지에 DI를 설정할 자바 파일(ApplicationConfig.java)을 만들거야.

 

△ 예제 )

src/main/java

- com/student/ex

-MainClass.java

-Student.java

-ApplicationConfig.java

 

 

[ Student ]

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
package com.student.ex;
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

 

 

 

[ MainClass ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package com.student.ex;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 
public class MainClass {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext (ApplicationConfig.class);
        
        Student student1 = ctx.getBean("student1",Student.class);
        System.out.println("이름 : "+ student1.getName());
        System.out.println("나이 : "+ student1.getAge());
        System.out.println("취미 : "+ student1.getHobbys());
        System.out.println("키 : "+ student1.getHeight());
        System.out.println("몸무게 : "+ student1.getWeight());
        
        Student student2 = ctx.getBean("student2",Student.class);
        System.out.println("이름 : "+ student2.getName());
        System.out.println("나이 : "+ student2.getAge());
        System.out.println("취미 : "+ student2.getHobbys());
        System.out.println("키 : "+ student2.getHeight());
        System.out.println("몸무게 : "+ student2.getWeight());
    }
}
cs

 

 

[ ApplicationConfig ]

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
package com.student.ex;
 
import java.util.ArrayList;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
@Configuration
public class ApplicationConfig {
    @Bean
    public Student student1(){
        ArrayList<String> hobbys = new ArrayList<String>();
        hobbys.add("수영");
        hobbys.add("요리");
        
        Student student = new Student("홍길동",20,hobbys);
        student.setHeight(180);
        student.setWeight(80);
        
        return student;
    }
    @Bean
    public Student student2(){
        ArrayList<String> hobbys = new ArrayList<String>();
        hobbys.add("독서");
        hobbys.add("음악감상");
        
        Student student = new Student("홍길동",22,hobbys);
        student.setHeight(175);
        student.setWeight(70);
        
        return student;
    }
}
cs



출력 결과 및 분석

 

이름 : 홍길동

나이 : 20

취미 : [수영, 요리]

키 : 180.0

몸무게 : 80.0

이름 : 홍길동

나이 : 22

취미 : [독서, 음악감상]

키 : 175.0

몸무게 : 70.0

 

- 이전까지 xml에서 Bean을 생성했지만, 여기서는 ApplicationConfig에서 Bean을 생성 -> xml을 이용하지 않고 java에서 Bean생성

 

 

 

 

 

3. XML과 JAVA를 같이 이용한 DI 설정방법


Xml과 Java를 같이 이용한 방법은  두가지가 있다. 


1) Xml파일에 JAVA파일을 포함시켜 사용 

2) Java파일에 Xml을 포함시켜 사용










1) Xml파일에 JAVA파일을 포함시켜 사용


△ 예제 )

src/main/java

- com/student1/ex

-MainClass.java

-Student.java

-ApplicationConfig.java

- com/main/resources

-applicationCTX3_1.xml

 

[ Student ]

 바로 위의 예제와 코드 같음.

 

[ MainClass ]

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
package com.student1.ex;
// 1번방식 import
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
 
public class MainClass {
    public static void main(String[] args) {
 
        //1. Xml안에 Java가 있으니까 접근경로는 xml에 접근 -> GenericXmlApplicationContext
        AbstractApplicationContext ctx = new  GenericXmlApplicationContext("classpath:applicationCTX3_1.xml");
        
        Student student1 = ctx.getBean("student1",Student.class);
        System.out.println("이름 : "+ student1.getName());
        System.out.println("나이 : "+ student1.getAge());
        System.out.println("취미 : "+ student1.getHobbys());
        System.out.println("키 : "+ student1.getHeight());
        System.out.println("몸무게 : "+ student1.getWeight());
        
        Student student2 = ctx.getBean("student2",Student.class);
        System.out.println("이름 : "+ student2.getName());
        System.out.println("나이 : "+ student2.getAge());
        System.out.println("취미 : "+ student2.getHobbys());
        System.out.println("키 : "+ student2.getHeight());
        System.out.println("몸무게 : "+ student2.getWeight());
        
        ctx.close();
    }
}
cs


[ ApplicationConfig ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package com.student1.ex;
import java.util.ArrayList;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
@Configuration
public class ApplicationConfig {
    
    @Bean
    public Student student1(){
        ArrayList<String> hobbys = new ArrayList<String>();
        hobbys.add("수영");
        hobbys.add("요리");
        
        Student student = new Student("홍길동",20,hobbys);
        student.setHeight(180);
        student.setWeight(80);
        
        return student;
    }
}
cs


[ applicationCTX3_1.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
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.2.xsd"
    xmlns:context="http://www.springframework.org/schema/context">
 
    <context:annotation-config/>
    <bean class="com.student1.ex.ApplicationConfig"></bean>
  
    <bean id="student2" class="com.student1.ex.Student">
        <constructor-arg value="홍길순"></constructor-arg>
        <constructor-arg value="30"></constructor-arg>
        <constructor-arg >
            <list>
                <value>마라톤</value>
                <value>요리</value>
            </list>
        </constructor-arg>
        <property name="height" value="170"></property>
        <property name="weight" value="60"></property>
    </bean>
 
</beans>
cs





출력 결과 및 분석

 

이름 : 홍길동

나이 : 20

취미 : [수영, 요리]

키 : 180.0

몸무게 : 80.0

이름 : 홍길동

나이 : 22

취미 : [독서, 음악감상]

키 : 175.0

몸무게 : 70.0



 - Annotation을 이용하려면 xml에서 2번줄 <beans>태그에 

xmls:context = "http://www.springframework.org/schema/context" 를 추가하고

xsi:schemaLocation = "http://www.springframework.org/schema/beans 

 http://www.springframework.org/schema/beans/spring-beans.xsd

 http://www.springframework.org/schema/context

 http://www.springframework.org/schema/context/spring-context-3.2.xsd" 부분 추가! (빨간색)


 - xml파일에서 <context:annotation-config>를 통해서 ApplicationConfig.java에 접근하는 방식

 

 





2) Java파일에 Xml을 포함시켜 사용

△ 예제 )

src/main/java

- com/student2/ex

-MainClass.java

-Student.java

-ApplicationConfig.java

- com/main/resources

-applicationCTX3_2.xml

 

 

[ Student ]

 바로 위의 예제와 코드 같음.

 

[ MainClass ]

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
package com.student2.ex;
 
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 
public class MainClass {
    public static void main(String[] args) {
 
        //2. Java안에 Xml을 가지고있는 방식
        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(ApplicationConfig.class);
        
        Student student1 = ctx.getBean("student1",Student.class);
        System.out.println("이름 : "+ student1.getName());
        System.out.println("나이 : "+ student1.getAge());
        System.out.println("취미 : "+ student1.getHobbys());
        System.out.println("키 : "+ student1.getHeight());
        System.out.println("몸무게 : "+ student1.getWeight());
        
        Student student2 = ctx.getBean("student2",Student.class);
        System.out.println("이름 : "+ student2.getName());
        System.out.println("나이 : "+ student2.getAge());
        System.out.println("취미 : "+ student2.getHobbys());
        System.out.println("키 : "+ student2.getHeight());
        System.out.println("몸무게 : "+ student2.getWeight());
        
        ctx.close();
    }
}
cs

2번방식으로 Annotation을 이용하면 1번방식처럼 직접 xml로 경로를 지정하지 않고 ApplicationConfig.class에 접근하게되면 @ImportResourse("classpath:applicationCTX3.xml")를 만난다.


[ ApplicationConfig ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com.student2.ex;
import java.util.ArrayList;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;
 
@Configuration
@ImportResource("classpath:applicationCTX3_2.xml")
public class ApplicationConfig {
    
    @Bean
    public Student student1(){
        ArrayList<String> hobbys = new ArrayList<String>();
        hobbys.add("수영");
        hobbys.add("요리");
        
        Student student = new Student("홍길동",20,hobbys);
        student.setHeight(180);
        student.setWeight(80);
        
        return student;
    }
}
cs

 ApplicationConfig에서 student1에 대한 Bean을 지정하고 applicationCTX3.xml에서 student2에 대한 Bean을 설정

 


[ applicationCTX3_2.xml ]

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?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="student2" class="com.student2.ex.Student">
        <constructor-arg value="홍길순"></constructor-arg>
        <constructor-arg value="30"></constructor-arg>
        <constructor-arg >
            <list>
                <value>마라톤</value>
                <value>요리</value>
            </list>
        </constructor-arg>
        <property name="height" value="170"></property>
        <property name="weight" value="60"></property>
    </bean>
 
</beans>
cs


** applicationCTX3.xml 파일에서 4번줄 xsi:schemaLocation 에 url 주소가 짝수개가 아니면 에러뜸 ㅋㅋㅋㅋ

 


출력 결과 및 분석

 

이름 : 홍길동

나이 : 20

취미 : [수영, 요리]

키 : 180.0

몸무게 : 80.0

이름 : 홍길순

나이 : 30

취미 : [마라톤, 요리]

키 : 170.0

몸무게 : 60.0



 - MainClass에서 xml으로 가지 않고 바로 ApplicationConfig.java로 간다. ApplicationConfig에서 annotation을 이용해서 xml 경로를 지정

 - 1번 : Main에서 applicationCTX.xml 경로 지정 -> applicationCTX.xml에서 context:annotation-config -> ApplicationConfig

 - 2번 : Main에서 ApplicationConfig 경로 지정 -> ApplicationConfig에서 @ImportResource -> applicationCTX.xml

 

 

 






'Web > Spring' 카테고리의 다른 글

Spring MVC(1)  (0) 2016.05.16
Spring 한글처리  (0) 2016.05.16
Spring(4)_Environment,Properties  (0) 2016.05.13
Spring(3)  (1) 2016.05.12
Spring(1)  (0) 2016.05.10