Spring Bean 자동 주입 및 구성 방법

Spring Bean 구성 방식

Spring 프레임워크는 다음과 같은 세 가지 방식으로 Bean을 구성할 수 있습니다:

  • XML 기반 명시적 설정
  • Java 기반 명시적 설정
  • 자동 탐색 및 주입을 통한 암묵적 설정

각 방식은 상황에 따라 적절하게 사용할 수 있으며, 개발자의 선호도에 따라 선택 가능합니다.

자동 Bean 등록과 주입

Spring은 아래 두 가지 개념을 통해 자동으로 Bean을 관리합니다:

  • 컴포넌트 스캔(Component Scanning): 애플리케이션 컨텍스트 내에서 @Component 어노테이션이 붙은 클래스를 자동으로 감지하여 Bean으로 등록합니다.
  • 의존성 자동 주입(Autowiring): 필요한 의존성을 자동으로 연결해주는 DI(Dependency Injection) 기능입니다.

탐색 가능한 Bean 생성하기

먼저 인터페이스를 정의합니다.

public interface MediaDevice {
    void play();
}

@Component 어노테이션을 이용해 구현체를 Bean으로 등록합니다.

@Component
public class MusicAlbum implements MediaDevice {
    @Override
    public void play() {
        System.out.println("음악 재생 중...");
    }
}

@Component는 Spring에게 해당 클래스가 컴포넌트임을 알리고, Bean으로 등록하라는 지시입니다. 이 경우 별도의 설정 없이도 Bean이 생성됩니다.

하지만 기본적으로 컴포넌트 스캔은 비활성화 상태이므로, 이를 활성화하는 설정이 필요합니다.

설정 파일 작성

Java 기반 설정 예제:

@Configuration
@ComponentScan(basePackages = {"com.example.media"})
public class AppConfig {

    @Bean
    public MediaDevice musicAlbum() {
        return new MusicAlbum();
    }
}

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">

    <context:component-scan base-package="com.example.media"/>
</beans>

테스트 코드

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:app-config.xml")
public class MediaPlayerTest {

    @Autowired
    private MediaDevice musicAlbum;

    @Test
    public void testPlay() {
        musicAlbum.play();
    }
}

Bean 이름 지정

기본적으로 Spring은 클래스명의 첫 글자를 소문자로 바꿔 Bean ID로 사용합니다 (예: MusicAlbum → musicAlbum). 직접 ID를 지정하려면 다음과 같이 합니다:

@Component("albumPlayer")
public class MusicAlbum implements MediaDevice {
    ...
}

의존성 주입 적용

@Autowired 어노테이션을 필드나 setter 메서드 위에 선언하여 자동 주입을 수행할 수 있습니다.

XML을 통한 Bean 구성

간단한 Bean 선언 예제:

<bean id="mediaDevice" class="com.example.media.MusicAlbum"/>

태그: Spring dependency-injection component-scan autowired xml-configuration

7월 31일 01:58에 게시됨