IoC 실습

Spring Framework 2016. 3. 24. 12:26

IoC 실습


1. example 패키지에서 작성

2. 사용 클래스: PrintUse, 구현 클래스: Print 인터페이스

3. 프린터 출력(PrinterPrint)과 콘솔출력(ConsolePrint)을 자식 클래스로 구현한 후 사용 클래스에서 이들을 사용할 수 있도록 구현한다.

4. 스프링 설정파일 : "config/beanfactory.xml"파일로 지정




1. 인터페이스 Print


package example;


public interface Print {

public void print(String text);

}




2. 인터페이스를 구현하는 콘솔 출력용 ConsolePrint 클래스

package example;

public class ConsolePrint implements Print {

@Override
public void print(String text) {
System.out.println("입력받은 출력값:"+text);
}
}



3. 인터페이스를 구현하는 출력용 PrinterPrint 클래스
웹 상으로 출력하기 위한 클래스이나 PrintUse에서는 사용하지 않았음.

package example;

public class PrinterPrint implements Print {

@Override
public void print(String text) {
System.out.println("프린터 출력");
}
}



4. 빈 객체 관리하는 설정파일 beanfactory.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="cprint" name="p1, p2, p3" class="example.ConsolePrint"></bean>

<!-- p1, p2, p3... 2개 이상의 name을 별칭으로 지정해줄 수 있다. -->

<bean id="cprint2" class="example.PrinterPrint"></bean>

</beans>





5. 실행하는 PrintUse 클래스


package example;


import java.util.Scanner;


import org.springframework.beans.factory.BeanFactory;

import org.springframework.beans.factory.xml.XmlBeanFactory;

import org.springframework.core.io.FileSystemResource;

import org.springframework.core.io.Resource;


public class PrintUse {


public static void main(String args[]) {

Scanner scan = new Scanner(System.in);

System.out.println("입력값 입력:");

String text = scan.next();

Resource res = new FileSystemResource("config/beanfactory.xml"); // xml을 프로젝트 바로 밑에 넣는 경우

// Resource res = new ClassPathResource("config/beanfactory.xml");

// STS 왼쪽 src/main/resources 밑에 config 폴더 만들어 xml 파일 넣는 경우

BeanFactory factory = new XmlBeanFactory(res); // XmlBeanFactory는 실행 가능하지만 호환문제로 가운데줄 표시됨

// 위의 2개 클래스는 3.2 이후 버전에서는 

AbstractApplicationContext context = new ClassPathXmlApplicationContext("beanfactory.xml");

이런 형식으로 한 개의 클래스로 통합되었다.


Print bean = factory.getBean("cprint", Print.class); // 기본 방식으로 선언하는 경우

Print bean = (Print) factory.getBean("cprint");  // 타입 캐스트 방식으로 선언하는 경우

bean.print(text);


Print bean2 = factory.getBean("p1", Print.class); // name으로 호출한 경우

bean.print(text);

}

}




xml 파일을 src/main/resources에 넣은 경우. (ClassPathResource로 호출)




6. 실행 결과


입력값 입력:

금요일이다

3월 25, 2016 9:12:09 오전 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions

정보: Loading XML bean definitions from file [C:\workspaces\spring_sts\chap01_IoC\config\beanfactory.xml]

입력받은 출력값:금요일이다






Posted by netyhobby
,