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 값이 출력 된다.