본문 바로가기

Web Programming

Spring D.I. Pattern

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

DI... DI... 듣다듣다 어디서 되게 많이 들었다. DI 패턴이라고?? 기억 하기로는 DI 패턴이 아니라.. 예전에 Head First Design Patterns 를 보다가 나온 용어 중에 Dependency Inversion Priciple 이라는 것이 있었다. 의존성의 역행 원리? 정도로 해석을 할 수 있을텐데... 여러 얽히고 섥힌 객체들 간의 불필요한 의존성을 제거 해준다는데에 그 목적이 있다. 그럼 이렇게 의존성을 제거한 후에 이 객체들 끼리 조립하는 무엇이 필요하다고 하는데..

이렇게 Assembler 역할을 하는 것이 다름아닌 스프링의 XML 외계어 이다. 다시 말하면 XML 을 이용하여 객체들의 의존 관계를 정의해 줄 수 있다고 한다.

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

 <bean name="writeArticleService" class="com.dependencyInjection.sample.WriteArticleServiceImpl">
  <constructor-arg>
   <ref bean="articleDao"/>
  </constructor-arg>
 </bean>
 
 <bean name="articleDao" class="com.dependencyInjection.sample.MySqlDao">
 </bean>
</beans>


요것이 바로 내가 만들어준 applicationContext.xml 파일이다. bean 이라는 태그는 그야말로 빈 객체를 정의 하는 것이고.. 빈 객체의 변수명이나 파라미터 값을 설정해 주고.. 클래스가 있는 패스를 설정하기도 한다. 여러가지 설정 값들을 정의한다고 보면 되겠다.

그다음은 이걸 실행시키는 소스코드이다.

package com.dependencyInjection.sample;

import org.springframework.beans.factory.*;
import org.springframework.beans.factory.xml.*;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

public class Exec {
 public static void main(String[] args) {
  Resource resource = new ClassPathResource("applicationContext.xml");
  BeanFactory beanFactory = new XmlBeanFactory(resource);
  WriteArticleService articleService = (WriteArticleService) beanFactory.getBean("writeArticleService");
  articleService.write(new Article());
 }
}


이걸 실행시키면.. ^^ 뭐.. 콘솔창에 출력되는것 이외에 다른 특별한것은 없다. 다만 신기한 점은.. XmlBeanFactory 라는 녀석이 XML 설정 값을 읽어와서 빈 객체를 반환해 준다는 점이다.. 좀더 배워봐야 알듯하다.