본문으로 바로가기
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.



스프링에서 DI를 사용할 때 2가지 방식을 이용해 사용한다.

달리 설명할 필요없이 간단한 예제코드로 끝내 보자.


생성자 방식


스프링 XML 설정에서 생성자를 이용해서 의존 객체를 주입할 때 사용한 태그는 <constructor-arg>태그 이다. 만약 생성자에 의존 객체가 2개이면 순서대로 사용하면 된다.  또한 순서를 순서대로 사용하지 않는다면 index에 순서를 기입하여 사용할 수 있다.


자바 코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class HelloFormat {
    public String format;
    
    public void setFormat(String format) {
        
        this.format = format;
    }
}
 
public class Greeter {
    private HelloFormat helloFormat;
 
    Greeter(HelloFormat helloFormat) {
        this.helloFormat = helloFormat;
    }
    
    public String greet(String guest) {
        return String.format(helloFormat.format,  guest);
    }
}



xml 예제 코드


아래 예제에서 index를 사용하든 안하든 결과는 같다.


1
2
3
4
5
6
7
8
<bean id="helloformat" class="ktko.HelloFormat">
    <property name="format" value="Hello %s!!"></property>
</bean>
 
<bean id="greeter" class="ktko.Greeter">
    <!-- <constructor-arg index="0" ref="helloformat"/> -->
    <constructor-arg ref="helloformat"/>
</bean>



Main 함수


1
2
3
4
5
6
7
8
9
10
public static void main(String[] args) {
    // 설정 정보를 이용해서 빈 객체를 생성한다.
    GenericXmlApplicationContext ctx = new GenericXmlApplicationContext("classpath:applicationContext.xml");
 
    // 빈 객체를 제공한다.
    Greeter g = ctx.getBean("greeter", Greeter.class);
    System.out.println(g.greet("ktko")); //Hello ktko!!
    
    ctx.close();
}



설정 메서드 방식


SET으로 시작하는 프로퍼티 설정 메서드를 통해서 의존 객체를 주입 받는 방법을 지원하고 있다. 프로퍼티 설정 메서드는 다음과 같은 형식을 지니고 있다.


1. 메서드 이름이 set으로 시작한다.

2. set 뒤에는 프로퍼티 이름의 첫 글자를 대문자로 치환한 이름을 사용한다.

3. 한 개의 파라미터를 가지며, 파라미터의 타입은 프로퍼티의 타입이다.


백문이 불여일타 아래 에제를 보면 바로바로 알 수 있다.


자바 코드


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
public class HelloFormat {
    public String format;
    
    public void setFormat(String format) {
        
        this.format = format;
    }
}
 
public class Greeter {
    private String format;
    private String format2;
    private HelloFormat helloFormat;
    
    public String greet(String guest) {
        return String.format(format,  guest);
    }
    
    public String greet2(String guest) {
        return String.format(format2,  guest);
    }
    
    public String greet3(String guest) {
        return String.format(helloFormat.format,  guest);
    }
    
    public void setFormat(String format) {
        
        this.format = format;
    }
    
    public void setFormat2(String format2) {
        
        this.format2 = format2;
    }
    
    public void setHelloFormat(HelloFormat helloFormat) {
        
        this.helloFormat = helloFormat;
    }
}



xml 예제 코드


1
2
3
4
5
6
7
8
9
<bean id="helloformat" class="ktko.HelloFormat">
    <property name="format" value="Hello %s!!"></property>
</bean>
 
<bean id="greeter" class="ktko.Greeter">
    <property name="format" value="%s, 안녕하세요.!"/>
    <property name="format2" value="안녕 %s.!"/>
    <property name="helloFormat" ref="helloformat"/>
</bean>



Main 함수


1
2
3
4
5
6
7
8
9
10
11
12
13
public static void main(String[] args) {
    // 설정 정보를 이용해서 빈 객체를 생성한다.
    GenericXmlApplicationContext ctx = new GenericXmlApplicationContext("classpath:applicationContext.xml");
 
    // 빈 객체를 제공한다.
    Greeter g = ctx.getBean("greeter", Greeter.class);
    
    System.out.println(g.greet("ktko")); //ktko, 안녕하세요.!
    System.out.println(g.greet2("ktko")); //안녕 ktko.!
    System.out.println(g.greet3("ktko")); //Hello ktko!!
    
    ctx.close();
}



기본 데이터 값 설정 방법


스프링에서 다른 객체를주입 받기 위해 <constructor-arg> 태그와 <property> 태그의 ref와 value속성을 사용했다. 좀더 ref와 value속성에 대해서 간단하게 말하자면 객체를 주입하려고 할 때에는 ref를 사용하고 원시타입인 int, double, long, char 같은 타입은 value를 사용한다. 원칙적으로는 String도 객체지만 스프링에서는 원시타입과 동일시한다. 또한 int, value, String, long 다양한 형태가 있지만 value에 값이 알맞은 타입으로 자동 변환해 준다.