본문 바로가기
코딩 공부/web & Java

[Spring] Spring XML 설정

by 현장 2023. 10. 9.

Spring XML 설정

Spring 프레임워크의 초기에는 Java 설정이 없고 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"
       xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- bean definitions here -->

    <bean id="name" class="java.lang.String">
        <constructor-arg value="Hyeon" />
    </bean>

    <bean id="age" class="java.lang.Integer">
        <constructor-arg value="35" />
    </bean>
    
    <bean id="game" class="com.in28minutes.learnspringframework.game.PacmanGame" />

    <bean id="gameRunner" class="com.in28minutes.learnspringframework.game.GameRunner">
        <constructor-arg ref="game" />
    </bean>
</beans>

그래서 이와 같이 XML 설정파일을 작성하여 Bean들을 생성했습니다. 그 후

public class XmlConfigurationLuncherApplication {

    public static void main(String[] args) {
        try (var context =
                     new ClassPathXmlApplicationContext
                             ("contextConfiguration.xml"))
        {
            Arrays.stream(context.getBeanDefinitionNames())
                    .forEach(System.out::println);

            System.out.println(context.getBean("name"));
            System.out.println(context.getBean("age"));

            context.getBean(GameRunner.class).run();
        }


    }
}

@Configuration과 @ComponentScan이 없이 위와 같이 자바에서 ClassPathXmlApplicationContext를 이용하여 해당 파일이 src/main/resources에 있을 경우 이름만으로 불러올 수 있었습니다.  또한 Bean에 필요한 이름은 id을 통해 지정하고, class로 타입을 지정합니다. 또한 constructor-arg통해 생성자 매서드를 정의하는 것처럼 사용할 수 있습니다.

name
age
game
gameRunner
Hyeon
35
Running game: com.in28minutes.learnspringframework.game.PacmanGame@4116aac9
위로 이동
아래로 이동
왼쪽으로 이동
오른쪽으로 이동

그로인해 이와 같은 결과를 얻을 수 있지만 시대가 지나면서 Spring의 발전에 따라서 사용하지는 않습니다. 하지만 여러 오래된 프로젝트에서는 사용하는 경우가 있으므로 인지는 하고있는 것이 좋습니다.

 

어노테이션과 XML 설정의 차이

  Annotations XML Configuration
사용감 변수 자체 소스에 어노테이션으로 적용 가능해 쉽다. 패키지 이름을 class에 전체를 입력해야 하는등 번거롭다.
간결함 간결하다. 간결하지 않다.
POJO 어노테이션 사용시 Spring 프레임워크를 이용하므로 깔끔하지 않다. POJO가 깔끔하다.
관리 소스와 가깝게 어노테이션을 표현해 관리하기
편하다.
class가 바뀌거나 패키지를 바꿀때 번거로워 관리하기
불편하다.
사용 빈도 매우 자주 사용한다. 요즘 거의 사용되지 않는다.
권장 사항 둘 다 사용할 수 있고 사용햐도 괜찮지만 섞어서 사용하면 안된다.
디버그 Spring 프레임워크를 잘알아야 해서 디버그 관리가 어렵다. XML 설정이 장황하게 많은 것을 명시적으로 표시해 어노테이션에 비해서는 쉽다.