2013년 7월 23일 화요일

[Spring Framework3.2강좌]Spring DI(메소드 대체, method replace)

[Magictian.java]
package magic;
public class Magician {
public Magician() {}
  public void magic() {
    System.out.println("마술을 시작합니다.");
    System.out.println("마술상자에는 무엇이 있을까요?");
    System.out.println(" 짜잔 --> " + magicBox.getContents()); //마술상자안의 내용물 확인
  }
  //마술상자를 주입
  private MagicBox magicBox;
  public void setMagicBox(MagicBox magicBox) {
    this.magicBox = magicBox;
  }
  private String magicWords;
  public void setMagicWords(String magicWords) {
    this.magicWords = magicWords;
  }
}
 
[MagicBox.java]
package magic;
public interface MagicBox {
    public String getContents();
}

[MagicBoxImpl.java]
package magic;
public class MagicBoxImpl implements MagicBox{
  public MagicBoxImpl() {}
  public String getContents() {
    return "아름다운 아가씨";   //최초 마술상자에는 아름다운 아가씨가 있다.
  }
}
 
[Tiger.java]
//spring xml파일(magic.xml)에서 메소드 대체되는 Tiger객체.
//MethodReplacer의 reimplement 메소드를 재정의하면 된다.
package magic;
import java.lang.reflect.Method;
import org.springframework.beans.factory.support.MethodReplacer;
public class Tiger implements MethodReplacer {
 public Object reimplement(Object target, Method method, Object[] args)  throws Throwable {   
     return "난 호랑이다 어흥~!!";
    }
}
 
[MagicTest.java]
package magic;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MagicTest {
  public static void main(String[] args) throws Exception{
    ApplicationContext ctx = new ClassPathXmlApplicationContext("magic.xml");
    Magician magician = (Magician) ctx.getBean("magician");
    magician.magic();
  }
}
 
[magic.xml]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans> 
  <bean id="magician" class="magic.Magician">
    <property name="magicBox" ref="magicBox" />
    <property name="magicWords" value="수리수리마수리!!!" />
  </bean>
 
  <bean id="magicBox" class="magic.MagicBoxImpl">
    <replaced-method name="getContents" replacer="tiger" />
  </bean>
 
  <bean id="tiger" class="magic.Tiger" />
</beans>

댓글 없음:

댓글 쓰기