Spring DI가 적용된 HelloWorld

Hello World Spring 버젼

* 프로젝트는 STS 에서 Simple Spring Utility Project로 생성 함.


[app-context.xml]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="UTF-8"?>
 
     <bean id = "provider" class = "com.ljs.spring.provider.impl.StandardMessageProvider"/>
     <bean id = "renderer" class = "com.ljs.spring.render.impl.StandardMessageRender">
         <property name="provider" ref="provider"/
     </bean>
 
</beans>
 
cs

 * bean id는 xml 파일과 applicationCotext에서 유효하다. 실제 생성되는 객체는 class="" 부븐의 객체를 생성한다. property를 지정하는 경우 bean생성시 맴버 변수에 지정값을 자동으로 입력하여 준다. 대신에 관련 프로퍼티에 setter 메소드는 구현되어 있어야 한다.

 

[interface IMessageProvider]

1
2
3
4
5
package com.ljs.spring.provider;
 
public interface IMessageProvider {
    public String getMessage();
}
cs

 

[StandardMessageProvider implements IMessageProvider]

1
2
3
4
5
6
7
8
9
10
11
package com.ljs.spring.provider.impl;
 
import com.ljs.spring.provider.IMessageProvider;
 
public class StandardMessageProvider implements IMessageProvider{
    
    public String getMessage() {
        return "Hello World";
    }
 
}
cs


[interface IMessageProvider]

1
2
3
4
5
6
7
8
9
package com.ljs.spring.render;
 
import com.ljs.spring.provider.IMessageProvider;
 
public interface IMessageRender {
    public void render();
    public void setMessageProvider(IMessageProvider provider);
    public IMessageProvider getMessageProvider();
}
cs

 

[StandardMessageRender implements IMessageRender]

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
package com.ljs.spring.render.impl;
 
import com.ljs.spring.provider.IMessageProvider;
import com.ljs.spring.render.IMessageRender;
 
public class StandardMessageRender implements IMessageRender {
    
    private IMessageProvider provider = null;
    
    public void render() {
        if(provider == null) {
            throw new RuntimeException("message provider not founded: "
                + StandardMessageRender.class.getName());
        } else {
            System.out.println(provider.getMessage());
        }
    }
 
    public IMessageProvider getProvider() {
        return provider;
    }
 
    public void setProvider(IMessageProvider provider) {
        this.provider = provider;
    }
}
cs


[SpringHelloWorld.main]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package com.ljs.spring;
 
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
import com.ljs.spring.render.IMessageRender;
 
public class SpringHelloWorld {
 
    public static void main(String[] args) {
        // app-context.xml에 설정된 bean정보를 기반으로 bean생성
        ApplicationContext ctx = new ClassPathXmlApplicationContext("META-INF/spring/app-context.xml");
        // 생성된 bean 중 필요한 bean id를 지정하여 획득
        IMessageRender renderer = (IMessageRender) ctx.getBean("renderer", IMessageRender.class);
        renderer.render();
    }
    
}
cs


사용되는 인터페이스와 구현체는 이전과 다를 바 없다. 대신 spring projects는 이전과 다르게 별도 properties 파일이 필요 없다 . 또한 Factory패턴을 구현하는 bean관리 패턴이 없다. 이 모든 것은 app-context.xml 파일이 관련 정보를 대신하고, bean에 대한 관리는 ApplicationContext에서 모두 처리하여 주기 때문이다.


다운로드


이 글을 공유하기

댓글

Email by JB FACTORY