Back-End/Spring

[Spring] IoC 컨테이너 사용하기 - XML Config

유자맛바나나 2021. 8. 19. 00:16

IoC 컨테이너 사용하기

Spring Bean Configuration을 읽어객체를 생성하고 조립해주는 Spring의 구체적 객체는 ApplicationContext(Interface) 다.
SpringConfig를 넘기는 방식에 따라 4가지로 분류된다

  • ClassPathxmlApplicationContenxt: Application의 root부터 경로를 지정할 때 (대표적인 구현체)
  • FileSystemXmlApplicationContenxt: xml 파일의 directory 경로
  • XmlWebApplicationContenxt: SpringConfig.xml을 웹에 등록해서 사용
  • AnnotationConfigApplicationContenxt: Annotation을 스캔하는 방식으로 사용

아래 예제를 통해 IoC 컨테이너에 등록된 Bean을 사용해보자

1) Spring Bean 등록

ElectricMotor (Bean으로 등록될 Class)

package com.test.di;

public interface PowerUnit {
    void printPowerType();
}

public class ElectricMotor implements PowerUnit {
    @Override
    public void printPowerType() {
        system.out.println("ElectricMotor");
    }
}
  • IoC 컨테이너에 Bean으로 등록될 Class
  • printPowerType() 메서드가 잘 실행되는지 테스트 예정이다

SpringConfig.xml (xml 형식의 Spring Bean Configuration)

<?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-3.0.xsd">

    <bean id="electricMotorBean" class="com.test.di.ElectricMotor"/>
</beans>
  • SpringConfig.xml는 src/main/resource 또는 그 하위 경로에 있어야 한다
  • Bean 구분자로 id="electricMotorBean" 설정

2) IoC 컨테이너 사용(ClassPathxmlApplicationContenxt)

public void client() {

    ApplicationContext context = new ClassPathXmlApplicationContext("./SpringConfig.xml");

    ElectricMotor electricMotorBean1 = (ElectricMotor) context.getBean("electricMotorBean");
    System.out.println("id 속성으로 Bean을 꺼내는 방식");
    electricMotorBean1.printPowerType();

    ElectricMotor electricMotorBean2 = context.getBean(ElectricMotor.class);
    System.out.println("자료형으로 Bean을 꺼내는 방식");
    electricMotorBean2.printPowerType();
}
실행 결과
  • 프로젝트를 시작하면 SpringConfig.xml에 명시한대로 Spring이 Bean을 생성, 조립(DI)한 뒤 IoC컨테이너에 담아둔다.
  • Bean을 사용하려면 위와 같이 ApplicationContext를 정의해 id 또는 자료형 방식으로 사용할 수 있다.
  • id 방식으로 사용할 경우 형변환을 해줘야하기 때문에 일반적으로 자료형이 선호되는 방식이다.