더북(TheBook)

3.5.3 스프링 컴포넌트 선언하기

어떤 서비스 클래스를 개발하고 이를 스프링 기반의 애플리케이션에서 사용하기를 원한다면 스프링에게 이 빈이 다른 빈에 주입될 수 있다는 것을 알려주고, 스프링이 이 빈들을 관리하게 해야 합니다. 2장의 예제에서 메시지 결과를 출력하는 MessageRenderer가 렌더링할 메시지를 제공하는 MessageProvider에 의존했던 것을 생각해 보기 바랍니다. 다음 예제 코드는 두 서비스를 인터페이스와 구현체로 다시 작성한 것입니다.

예제 3-17 2장에서 사용했던 예제 인터페이스와 구현체([[hello-world]] MessageRenderer.java, MessageProvider.java, StandardOutMessageRenderer.java, HelloWorldMessageProvider.java)

package com.apress.prospring5.ch2.decoupled;

//renderer 인터페이스
public interface MessageRenderer {
    void render();
    void setMessageProvider(MessageProvider provider);
    MessageProvider getMessageProvider();
}

// rendered 구현체
public class StandardOutMessageRenderer
        implements MessageRenderer {

    private MessageProvider messageProvider;

    @Override
    public void render() {
        if (messageProvider == null) {
            throw new RuntimeException(
                " messageProvider 클래스의 프로퍼티를 설정해야 합니다:"
                + StandardOutMessageRenderer.class.getName());
        }
        System.out.println(messageProvider.getMessage());
    }

    @Override
    public void setMessageProvider(MessageProvider provider) {
        this.messageProvider = provider;
    }

    @Override
    public MessageProvider getMessageProvider() {
        return this.messageProvider;
    }
}

//provider 인터페이스
public interface MessageProvider {
    String getMessage();
}

//provider 구현체
public class HelloWorldMessageProvider implements MessageProvider {

    @Override
    public String getMessage() {
        return "Hello World!";
    }

}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.