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() ;
}
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("프로그래머가 개발을 합니다.");
}
}
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("디자이너가 디자인을 합니다.");
}
}
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>
<?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;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class EmpTest {
public static void main(String[] args) throws Exception{
ApplicationContext ctx = new ClassPathXmlApplicationContext("emp.xml");
public static void main(String[] args) throws Exception{
ApplicationContext ctx = new ClassPathXmlApplicationContext("emp.xml");
Emp emp = (Emp) ctx.getBean("emp");
emp.work();
}
}
emp.work();
}
}
댓글 없음:
댓글 쓰기