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!"; } }