- Today
- Total
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 오라클
- function
- 함수
- Hostinger
- dbeaver
- 워드프레스
- 환경세팅
- 클론코딩
- 엘리멘터
- 문제해결
- 트러블슈팅
- wordpress
- JSP
- 배열
- 의존성주입
- spring boot
- javascript
- 쿼리개선
- Oracle
- 티스토리챌린지
- pl/sql
- 오블완
- 프로시저
- 이클립스
- PROCEDURE
- sql
- 워스프레스
- PLSQL
- 오류해결
- iframe
개발 공부중
[Spring] 컴포넌트 스캔 @ComponentScan @Filter @Autowired 본문

컴포넌트 스캔 (@ComponentScan)
기존에는 객체(Bean)를 스프링 컨테이너에 넣어달라고 직접 명시했다면,
컴포넌트 스캔은 "알아서 클래스를 찾아서 자동으로 스프링 빈으로 등록하는 기능"
@ComponentScan: 설정 정보 클래스 위 붙임
@Component: 등록하고 싶은 클래스 위에 붙임
@ComponentScan 은 @Component가 붙은 모든 클래스를 스프링 빈으로 등록
필터 (@Filter)
includeFilters : 컴포넌트 스캔 대상을 추가로 지정
excludeFilters : 컴포넌트 스캔에서 제외할 대상을 지정
@Configuration
@ComponentScan(
// 하위 패키지까지 스캔
basePackages = "com.example.demo",
// Configuration이 붙은 클래스는 스캔 대상에서 제외
excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class)
)
public class AutoAppConfig {
}
오토와이어드 (@Autowired)
생성자에 @Autowired를 붙여주면,
스프링이 빈을 생성할 때 타입을 보고 알맞은 의존성(객체)을 자동으로 찾아서 주입
(타입이 같은 빈을 찾음)
@Component
public class OrderServiceImpl implements OrderService {
private final MemberRepository memberRepository;
@Autowired // 생성자가 하나라면 생략 가능 (스프링 부트)
public OrderServiceImpl(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
}
컴포넌트 스캔은
@Component, @Controller, @Service, @ Repository, @Configuration
도 스캔 대상에 포함
컴포넌트 스캔에서 같은 이름의 빈이 등록되는 경우
1. 자동 빈 등록 vs 자동 빈 등록
만약 서로 다른 패키지에 같은 이름의 클래스(예: service.MemberService, domain.MemberService)가 있고 둘 다 @Component가 붙어있다면? 스프링은 ConflictingBeanDefinitionException 예외를 발생시킴
해결: 클래스 이름을 변경하거나, @Component("customName")처럼 이름을 직접 지정하기
2. 수동 빈 등록 vs 자동 빈 등록
AppConfig에 수동으로 등록한 빈 이름과, @Component로 자동 등록된 빈 이름이 충돌하면?
과거 스프링은 수동 등록 빈이 우선권을 가졌지만(자동 빈을 오버라이딩).
최근 스프링 부트는 설정 실수를 방지하기 위해 기본적으로 에러를 발생시키도록 변경
*************************** APPLICATION FAILED TO START ***************************
Description:
The bean 'memberService', defined in class path resource [(경로)/DependencyConfig.class], could not be registered. A bean with that name has already been defined in file [(경로)/member/MemberService.class] and overriding is disabled.
Action:
Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true

Action 에 있는 메시지를 보고
application.properties 파일에 위 코드를 입력하면 오버라이딩 가능하도록 변경됨
'SPRING BOOT' 카테고리의 다른 글
| [Spring] 의존성 주입(DI) 방식 비교와 빈(Bean) 충돌 해결하기 (0) | 2026.01.25 |
|---|---|
| [IntelliJ] 단위 테스트 생성 방법 (ctrl + shift + t ) (0) | 2023.08.17 |
| [Spring Boot] JUnit 테스트 클래스 예제 (0) | 2023.08.07 |
