Java/Spring
[Spring] DI 예시 (interface + class + xml)
praybe
2021. 12. 13. 12:30
소스코드를 바꾸지 않고 xml에서 바꾼것만으로 변경 적용할 수 있는 스프링의 장점 알아보도록 합시다~.
팬슬 패키지: interface 클래스 + 자손 클래스들 + 메인
리소스 패키지: xml파일
부모 클래스
package com.javalec.ex.pencil;
public interface Pencil {
public void use();
}
자손 클래스
package com.javalec.ex.pencil;
public class Pencil4B implements Pencil {
@Override
public void use() {
System.out.println("4B 연필입니다.");
}
}
package com.javalec.ex.pencil;
public class Pencil6B implements Pencil {
@Override
public void use() {
System.out.println("6B 연필입니다.");
}
}
package com.javalec.ex.pencil;
public class Pencil6BWithEraser implements Pencil {
@Override
public void use() {
System.out.println("6B 지우개 연필입니다.");
}
}
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.xsd">
<!-- bean id 이게 객체생성임 -->
<bean id="pencil" class="com.javalec.ex.pencil.Pencil4B"/>
</beans>
main 클래스
package com.javalec.ex.pencil;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
public class PencilMain {
public static void main(String[] args) {
String config="classpath:appCTX3.xml";
AbstractApplicationContext ctx = new GenericXmlApplicationContext(config);
Pencil pencil = ctx.getBean("pencil", Pencil.class);
pencil.use();
ctx.close();
}
}
출력값:
6B나 지우개연필을 출력하고 싶으면
xml 파일의 <bean>의 class 부분을 수정해주면 된다.
주소를 com.javalec.ex.pencil.Pencil4B 가 아니라
com.javalec.ex.pencil.Pencil6B 혹은
com.javalec.ex.pencil.Pencil6BWithEraser 라고 적으면
해당 클래스에 적었던 Sysout 값이 출력 된다.