@Configuration
// 이 어노테이션은 현재 클래스가 스프링 설정 정보를 제공하는 구성 클래스임을 나타낸다.
@ComponentScan(
// @ComponentScan 어노테이션은 스프링에게 이 패키지와 하위 패키지에서 @Component 어노테이션이 붙은 모든 클래스를 찾아 스프링 빈으로 등록하도록 지시한다.
excludeFilters = @ComponentScan.Filter(
// excludeFilters 속성은 특정 조건에 해당하는 컴포넌트를 스캔 대상에서 제외시키는 필터를 설정한다.
type = FilterType.ANNOTATION,
// FilterType.ANNOTATION은 어노테이션 타입의 필터를 의미하며, 어노테이션이 붙은 클래스를 포함시키거나 제외시키는 기준으로 사용된다.
classes = Configuration.class
// classes 속성에 지정된 Configuration.class는 @Configuration 어노테이션이 붙은 설정 클래스를 컴포넌트 스캔 대상에서 제외시키는 역할을 한다.
)
)
public class AutoAppConfig {
}
@ComponentScan
@ComponentScan 어노테이션은 스프링 프레임워크에서 매우 중요한 역할을 한다. 이 어노테이션은 스프링이 클래스패스에서 @Component가 붙은 클래스들을 찾아 스프링 어플리케이션 컨텍스트에 빈(Bean)으로 등록하도록 지시한다. @Component 어노테이션은 @Repository, @Service, @Controller 등과 같은 다른 스테레오타입 어노테이션을 포함한다.
기능:
- 자동 스캔: 지정된 패키지 및 그 하위 패키지에서 @Component 어노테이션과 그 파생 어노테이션들을 찾아 빈으로 등록한다.
- 필터 기능: 필요에 따라 특정 클래스를 스캔 대상에서 포함시키거나 제외시킬 수 있다. 예를 들어, @Configuration 클래스를 스캔 대상에서 제외시키는 것 등이 가능하다.
@Autowired
@Autowired 어노테이션은 스프링의 의존성 주입(Dependency Injection) 기능을 활용하여, 선언된 모든 필드, 생성자, 메소드에 자동으로 해당 타입의 빈을 주입한다. 이는 스프링이 관리하는 빈 간의 의존성을 자동으로 연결해주는 역할을 한다.
기능:
- 필드 주입: 필드에 직접 @Autowired를 붙여 해당 타입의 빈을 자동으로 주입받을 수 있다.
- 생성자 주입: 생성자에 @Autowired를 붙이면 생성자의 파라미터에 해당하는 빈을 자동으로 주입받는다. 스프링 4.3 이후로는 생성자가 하나뿐인 경우 @Autowired를 생략할 수 있다.
- 메소드 주입: 메소드에 @Autowired를 붙여 해당 메소드의 파라미터에 필요한 빈을 주입받을 수 있다.
public class AutoAppConfigTest {
// AutoAppConfigTest 클래스 정의: 스프링 컨텍스트와 관련된 테스트를 수행하기 위한 클래스
@Test
// @Test 어노테이션은 JUnit에서 제공하는 어노테이션으로, 이 메서드가 테스트 메서드임을 나타낸다.
void basicScan() {
// basicScan 테스트 메서드 이름: AutoAppConfig 설정을 사용하여 컴포넌트 스캔 기능을 테스트한다.
ApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class);
// ApplicationContext 인스턴스 생성: AnnotationConfigApplicationContext는 @Configuration이 붙은 클래스(AutoAppConfig)를 설정 정보로 사용하여 스프링 컨테이너를 초기화한다.
MemberService memberService = ac.getBean(MemberService.class);
// MemberService 타입의 빈을 스프링 컨텍스트에서 가져온다. 이는 AutoAppConfig를 통해 자동으로 등록된 빈이어야 한다.
assertThat(memberService).isInstanceOf(MemberService.class);
// assertThat과 isInstanceOf를 사용하여 memberService 인스턴스가 MemberService 타입의 인스턴스인지 확인한다. 이는 테스트의 검증 부분으로, 구성이 올바르게 되었는지 확인한다.
}
}
'SPRING > Spring' 카테고리의 다른 글
[스프링| 스프링 핵심 원리 | 기본편 | 의존관계 자동 주입] 다양한 의존관계 주입 방법 (0) | 2024.05.14 |
---|---|
[스프링| 스프링 핵심 원리 | 기본편 | 컴포넌트 스캔] 필터, 중복등록과 충돌 (0) | 2024.05.13 |
[스프링| 스프링 핵심 원리 | 기본편 | 싱글톤 컨테이너]@Configuration과 싱글톤 (0) | 2024.05.09 |
[스프링| 스프링 핵심 원리 | 기본편 | 싱글톤 컨테이너] 싱글톤 컨테이너, 싱글톤 방식의 주의점 (0) | 2024.05.09 |
[스프링| 스프링 핵심 원리 | 기본편 | 싱글톤 컨테이너] 웹 애플리케이션과 싱글톤 (0) | 2024.05.09 |