2013년 7월 27일 토요일

[오라클자바개발자실무교육,오엔제이프로그래밍실무교육센터,Spring Framework3.2강좌]Spring DI(메소드 주입, Getter Injection)

Spring DI의 메소드 주입중 하나인 Getter 주입에 대해 실습합니다.

오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷  실무전문 강의)


[Emp.java]
package emp;
public abstract class Emp {
public Emp() {}
  public void work() {
    getEmp().work(); //주입된 getEmp() 메소드를 사용
  }
  //getEmp를 주입, Emp가 주입된다.
  //Run-Time중에 xml 파일로 부터 빈을 주입받는다.
  public abstract Emp getEmp() ;
}
[Programmer.java]
package emp;
public class Programmer extends Emp{
    public Emp getEmp() {
    return this;
    }
   
    public void work() {
    System.out.println("프로그래머가 개발을 합니다.");
    }
}

[Designer.java]
package emp;
public class Designer extends Emp{
    public Emp getEmp() {
    return this;
    }
   
    public void work() {
    System.out.println("디자이너가 디자인을 합니다.");
    }
}
[emp.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="myemp" class="emp.Programmer" />
  <!-- <bean id="myemp" class="emp.Designer" /> -->
 
  <!-- 아래 lookup-method는 메소드를 런타입중에 새로운 구현으로 대체
       Getter주입은 Setter Injection의 역 으로 생각.
       getEmp()를 호출할 때마다 다른 myemp가 반환
                  그러나 Setter Injectioin은 단 한번만 주입
       주입되는 메소드명이 반드시 getXXX로 시작할 필요는 없다. -->
  <bean id="emp" class="emp.Emp">
    <lookup-method name="getEmp" bean="myemp"/>
  </bean>
</beans>
[EmpTest.java]
package emp;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class EmpTest {
  public static void main(String[] args) throws Exception{
    ApplicationContext ctx = new ClassPathXmlApplicationContext("emp.xml");
    Emp emp = (Emp) ctx.getBean("emp");
    emp.work();
  }
}

댓글 없음:

댓글 쓰기