본문 바로가기
Spring(스프링)

java 클래스파일(Configuration)을 이용한 의존성 주입

by 임혁진 2024. 10. 21.

Java Configuration 기본 세팅 구축하는 방법

Java 기반 설정을 통해 스프링 애플리케이션을 설정하는 방법을 소개합니다.

이 방법은 기존 XML 설정을 Java 클래스를 사용해 대체하는 방식으로, 코드의 가독성과 유지보수성을 높일 수 있습니다. 아래에서는 Java 설정 파일을 사용한 의존성 주입 방법과 이를 테스트하는 구성을 설명합니다.

※java configuration 기본세팅 구축하는 법 1탄    https://ohj9575.tistory.com/170
 

java 개발환경 구축 (※Java Configuration)

java configuration 을 하는 이유 환경 독립성: 개발, 테스트, 운영 환경마다 설정 값이 달라질 수 있습니다. 예를 들어 데이터베이스 URL, API 키, 포트 번호 등은 환경마다 다를 수 있기 때문에, 이를

ohj9575.tistory.com

※의존성 이란?           https://ohj9575.tistory.com/172
 

스프링(Spring) 프레임워크의 특징과 의존성 주입(DI)

1. 프레임워크가 나온 이유프레임워크는 개발자마다 능력 차이가 존재하는 상황에서, 이러한 차이를 줄이고 효율적으로 개발할 수 있도록 돕기 위해 등장했습니다.2. 스프링과 다른 프레임워크

ohj9575.tistory.com

 


1. Java 설정 파일의존성 주입하는 법

스프링 애플리케이션 설정 시, XML 설정 파일인 root-context.xml 대신 Java 설정 파일을 이용할 수 있습니다.

RootConfig 클래스는 이러한 설정을 담당하는 Java 클래스입니다. 

RootConfig.java 설정

package org.zerock.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan(basePackages = {"org.zerock.sample"}) // 스캔할 패키지 지정
public class RootConfig {
    // 필요한 설정이 있으면 여기에 추가
}

위 코드는 @Configuration @ComponentScan 애노테이션을 사용하여 Java 기반으로 스프링 컨텍스트를 설정합니다. @ComponentScan은 지정된 패키지에서 스프링이 관리할 빈을 자동으로 스캔하고 등록하는 역할을 합니다.

  • @Configuration: 해당 클래스가 스프링 설정 파일임을 나타냅니다.
  • @ComponentScan: 특정 패키지를 스캔하여 스프링 컨테이너에 빈으로 등록할( @Component, @Service, @Repository, @Controller 등이 붙은) 클래스를 자동으로 탐색합니다.

 


2. Java 설정 파일을 이용한 테스트 구성

스프링의 **SpringJUnit4ClassRunner**를 이용하여 테스트할 수 있습니다.

여기서 Java 설정 파일을 기반으로 스프링 컨텍스트를 설정하고, 의존성을 주입받는지 확인할 수 있습니다.

SampleTest 클래스 예시:

package org.zerock.sample;

import static org.junit.Assert.assertNotNull;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.zerock.config.RootConfig;

import lombok.Setter;
import lombok.extern.log4j.Log4j;

@RunWith(SpringJUnit4ClassRunner.class) // 스프링과 JUnit 통합 실행
@ContextConfiguration(classes = {RootConfig.class}) // RootConfig 기반으로 스프링 컨텍스트 설정
@Log4j
public class SampleTest {
    
    @Setter(onMethod_ = { @Autowired })
    private Restaurant restaurant; // Restaurant 빈 자동 주입

    @Test
    public void testExist() {
        assertNotNull(restaurant); // restaurant 객체가 null이 아님을 확인
        log.info(restaurant);      // restaurant 정보 로그 출력
        log.info("----------------------------------");
        log.info(restaurant.getChef()); // restaurant에 포함된 chef 정보 출력
    }
}
  • @RunWith(SpringJUnit4ClassRunner.class): 스프링의 JUnit 통합 기능을 사용하여 테스트 클래스가 스프링 컨텍스트에서 실행되도록 합니다.
  • @ContextConfiguration(classes = {RootConfig.class}): RootConfig 클래스를 기반으로 스프링 컨텍스트를 설정합니다.
  • @Autowired: 스프링 컨텍스트에서 Restaurant 객체를 자동으로 주입받습니다.
  • @Log4j: 로그를 기록하는 데 사용됩니다.

테스트 메서드 **testExist()**에서는 Restaurant 빈이 정상적으로 주입되었는지 확인하고, 주입된 객체와 그 내부에 있는 Chef 객체에 대한 정보를 로그로 출력합니다.


요약

  1. RootConfig 클래스: Java 기반으로 의존성 주입을 설정하는 클래스입니다. @ComponentScan을 사용하여 특정 패키지 내의 빈을 자동으로 등록할 수 있습니다.
  2. SampleTest 클래스: 스프링의 SpringJUnit4ClassRunner Java 설정 파일을 이용해 테스트 환경을 구성하고, 의존성 주입이 잘 이루어졌는지 확인합니다.

Java 설정을 통해 XML 설정을 대체하면 코드의 가독성과 유지보수성이 향상되며, 테스트와 설정도 더욱 간결하게 관리할 수 있다.