앞서 만들었던 애플리케이션을 스프링 프레임워크를 이용해 리팩터링하여 스프링이 직접 MessageRenderer에 MessageProvider를 제공하도록 해봅시다.
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class HelloWorldSpringDI {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("spring/app-context.xml");
MessageRenderer mr = ctx.getBean("renderer", MessageRenderer.class);
mr.render();
}
}
ApplicationContext 타입인 ClassPathXmlApplicationContext 인스턴스를 생성한 뒤 getBean() 메서드를 이용해 xml파일을 읽어 MessageRenderer 인스턴스를 가져옵니다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org.schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="provider"
class="com.example.Spring.HelloWorldMessageProvider"/>
<bean id="renderer"
class="com.example.Spring.StandardOutMessageRenderer"
p:messageProvider-ref="provider"/>
</beans>
위 xml파일을 보면 두 개의 자바빈이 있습니다. id가 renderer인 부분을 보면 p 애트리뷰트를 이용해 provider 빈을 messageProvider에 주입하는 것을 볼 수 있습니다. 프로그램을 실행하면 스프링이 app-context.xml을 읽어서 provider 빈과 renderer 빈을 생성하고, renderer 빈을 생성할 때 provider 빈을 messageProvider 매개변수에 주입해줍니다.그리고 render() 메서드가 실행되고 결과로 HelloWorld!가 콘솔에 출력됩니다.