Spring Bean

김민규·2026년 9월 13일

겅부

목록 보기
7/18

Spring Boot에서 사용되는 다양한 Bean 등록 방법들에 대해 설명하고, 각각의 장단점을 비교하세요.

@Component을 통한 Bean 등록

@Component 
public class MyComponent { }

@Component는 Spring이 해당 클래스를 Bean으로 등록하도록 지정하는 annotation입니다.
Spring Boot의 컴포넌트 스캔 대상 패키지에 포함되어 있다면 애플리케이션 시작 시 Bean으로 등록됩니다.

@Service, @Repository, @Controller

@Service
public class MemberService {
}
@Repository
public class MemberRepository {
}
@RestController
public class MemberController {
}

Spring에서는 역할에 따라 @Service, @Repository, @Controller와 같은 stereotype annotation을 제공합니다.
@Component 기반의 컴포넌트 스캔을 통해 Bean으로 등록됩니다.

@Bean을 이용한 Bean 등록

@Configuration 
public class AppConfig { 
	@Bean 
    public MyComponent myComponent() { 
    	return new MyComponent(); 
    } 
}

@Bean은 메서드가 반환하는 객체를 Spring Bean으로 등록하는 annotation입니다.
일반적으로 @Configuration 클래스 내부에서 사용합니다.
직접 수정할 수 없는 외부 라이브러리의 객체를 등록할 때 특히 유용합니다.

@ComponentScan을 이용한 Bean 등록

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

@ComponentScan은 지정된 패키지를 탐색하여 @Component, @Service, @Repository, @Controller 등이 붙은 클래스를 Bean으로 등록하도록 합니다.
일반적인 Spring Boot 프로젝트에서는 별도로 @ComponentScan을 선언하지 않아도 애플리케이션 클래스의 패키지를 기준으로 컴포넌트 스캔이 이루어집니다.

@Import를 이용한 Bean 등록

@Component
public class MyComponent {
}
////////////////////////////////////////
@Configuration
@Import(MyComponent.class)
public class AppConfig {
}

@Import는 특정 설정 클래스나 컴포넌트를 Spring 컨테이너에 등록할 때 사용하는 annotation입니다.

ImportSelector

public class MyImportSelector implements ImportSelector { 
	@Override 
	public String[] selectImports( AnnotationMetadata importingClassMetadata ) { 
		return new String[] { "com.example.MyComponent" };
    } 
}

ImportSelector는 조건이나 설정에 따라 Import할 클래스를 동적으로 선택할 수 있습니다.

ImportBeanDefinitionRegistrar

public class MyRegistrar
        implements ImportBeanDefinitionRegistrar {

    @Override
    public void registerBeanDefinitions(
            AnnotationMetadata metadata,
            BeanDefinitionRegistry registry) {
    }
}

ImportBeanDefinitionRegistrar는 BeanDefinition을 직접 등록할 수 있는 확장 기능입니다.
BeanDefinition은 Spring 컨테이너가 Bean을 생성하고 관리하기 위해 사용하는 메타데이터입니다.
이 기능은 Spring Boot 자동 설정이나 프레임워크 수준의 기능을 구현할 때 활용할 수 있습니다.

장단점 정리표

11. Bean 등록 방법 비교

등록 방법적합한 상황장점단점
@Component직접 작성한 일반 컴포넌트간결하고 직관적스캔 범위에 의존
@Service 등역할이 명확한 애플리케이션 계층의미가 명확함외부 클래스에는 적용 어려움
@Bean외부 라이브러리, 커스텀 객체 생성생성 과정 제어 가능설정 코드 필요
@ComponentScan패키지 단위 자동 등록반복 작업 감소스캔 범위 관리 필요
@Import특정 설정 또는 컴포넌트 명시적 등록명시적이고 모듈화 가능Import 구조 복잡 가능
ImportSelector동적 설정 선택조건부 등록 가능구현 난도 높음
ImportBeanDefinitionRegistrar프레임워크 수준 BeanDefinition 등록고급 확장 가능유지보수 난도 높음

0개의 댓글