예제 3-19 애너테이션을 사용해 빈 정의를 생성하는 클래스 예([[setter-injection]] HelloWorldMessageProvider.java, StandardOutMessageRenderer)
package com.apress.prospring5.ch2.decoupled; import com.apress.prospring5.ch2.decoupled.MessageProvider; import org.springframework.stereotype.Component; //간단한 빈 @Component("provider") public class HelloWorldMessageProvider implements MessageProvider { @Override public String getMessage() { return "Hello World!"; } } import com.apress.prospring5.ch2.decoupled.MessageProvider; import com.apress.prospring5.ch2.decoupled.MessageRenderer; import org.springframework.stereotype.Service; import org.springframework.beans.factory.annotation.Autowired; //복잡한 서비스 빈 @Service("renderer") 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 @Autowired public void setMessageProvider(MessageProvider provider) { this.messageProvider = provider; } @Override public MessageProvider getMessageProvider() { return this.messageProvider; } }