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