728x90
반응형
Bean을 등록 할때 @Bean을 사용하여 Bean을 수동으로 등록하는 방법이 있다.
하지만 Spring Framework에서는 Bean을 자동으로 컨테이너에 등록해주는 좋은 애노테이션이 존재한다.
- @ComponentScan: Spring이 컴포넌트(빈)를 찾을 위치를 지정하는 애노테이션이다. 이 애노테이션을 사용하면 지정된 패키지부터 하위 패키지까지 스캔하여 @Component, @Service, @Repository, @Controller 등과 같은 애노테이션이 붙은 클래스를 찾아 빈으로 등록한다.
- @Component: Spring에서 관리하는 빈으로 등록하고 싶은 클래스에 붙이는 애노테이션이다. 이 애노테이션이 붙은 클래스는 Spring에 의해 빈으로 관리되며, @ComponentScan에 의해 자동으로 스캔될 수 있다.
- @Autowired: 의존성 주입을 위해 사용되는 애노테이션으로, 해당 타입의 빈을 필드, 생성자, setter 등에 주입할 수 있도록 지정한다. 스프링은 @Autowired가 붙은 필드나 생성자의 파라미터를 보고 적절한 빈을 찾아서 주입한다.
#세개의 애노테이션을 함께 사용하는 예제를 살펴보면,
// Application.java
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan(basePackages = "com.example") // @ComponentScan 애노테이션으로 com.example 패키지부터 컴포넌트 스캔을 시작합니다.
public class Application {
// 설정 클래스
}
# @ComponentScan을 이용하여 @Coponent 애노테이션을 지정한 class를 찾아서 Bean으로 등록한다.
# basePackages는 Scan할 범위를 지정하는것이다. 해당 옵션을 추가하지 않는다면 전체 class 및 라이브러리까지 모두 Scan 하기때문에 성능면에서 좋지 않을수 있다.
// UserController.java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component // @Component 애노테이션으로 UserController 클래스를 빈으로 등록합니다.
public class UserController {
private UserService userService;
@Autowired // @Autowired 애노테이션으로 UserService의 의존성을 주입합니다.
public UserController(UserService userService) {
this.userService = userService;
}
public void addUser() {
userService.addUser();
}
}
# @Component를 붙여 @ComponentScan으로 찾을 수 있도록 지정한다.
# @Autowired를 이용하여 해당 type에 맞는 것을 찾아 의존성을 자동으로 주입한다.
728x90
반응형
'개발일기 > Spring' 카테고리의 다른 글
[Spring]@PostConstruct와@PreDestory (0) | 2024.03.21 |
---|---|
[Spring]@autowired , @qualifier , @primary (0) | 2024.03.20 |
[Spring]싱클톤 사용시 주의사항. (0) | 2024.03.18 |
[Spring]싱글톤 컨테이너 (0) | 2024.03.18 |
[Spring]BeanFactory , ApplicationContext (0) | 2024.03.18 |