더북(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 {

<span class="kd">private</span> <span class="n">MessageProvider</span> <span class="n">messageProvider</span><span class="o">;</span>

<span class="nd">@Override</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">render</span><span class="o">()</span> <span class="o">{</span>
    <span class="k">if</span> <span class="o">(</span><span class="n">messageProvider</span> <span class="o">==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
        <span class="k">throw</span> <span class="k">new</span> <span class="n">RuntimeException</span><span class="o">(</span>
            <span class="s">" messageProvider 클래스의 프로퍼티를 설정해야 합니다:"</span>
            <span class="o">+</span> <span class="n">StandardOutMessageRenderer</span><span class="o">.</span><span class="na">class</span><span class="o">.</span><span class="na">getName</span><span class="o">());</span>
    <span class="o">}</span>
    <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">messageProvider</span><span class="o">.</span><span class="na">getMessage</span><span class="o">());</span>
<span class="o">}</span>

<span class="nd">@Override</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">setMessageProvider</span><span class="o">(</span><span class="n">MessageProvider</span> <span class="n">provider</span><span class="o">)</span> <span class="o">{</span>
    <span class="k">this</span><span class="o">.</span><span class="na">messageProvider</span> <span class="o">=</span> <span class="n">provider</span><span class="o">;</span>
<span class="o">}</span>

<span class="nd">@Override</span>
<span class="kd">public</span> <span class="n">MessageProvider</span> <span class="nf">getMessageProvider</span><span class="o">()</span> <span class="o">{</span>
    <span class="k">return</span> <span class="k">this</span><span class="o">.</span><span class="na">messageProvider</span><span class="o">;</span>
<span class="o">}</span>

}

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

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

<span class="nd">@Override</span>
<span class="kd">public</span> <span class="n">String</span> <span class="nf">getMessage</span><span class="o">()</span> <span class="o">{</span>
    <span class="k">return</span> <span class="s">"Hello World!"</span><span class="o">;</span>
<span class="o">}</span>

}

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