Spring에서는 객체를 직접 생성하는 대신 스프링 컨테이너에 Bean으로 등록하고 관리할 수 있다.
이를 통해 의존성 주입(DI, Dependency Injection)이 가능해지고, 객체 간의 결합도를 낮출 수 있다.
Spring에서 Bean을 등록하는 방법은 크게 2가지가 있다.
1. 컴포넌트 스캔(Component Scan)
2. 자바 코드로 직접 등록(@Configuration, @Bean 사용)
하나씩 살펴보자. 🚀
1️⃣ 컴포넌트 스캔을 이용한 빈 등록
Spring Boot를 실행하면, 특정 패키지 하위에 있는 @Component 어노테이션이 붙은 클래스들을 자동으로 찾아서 빈으로 등록해준다.
@Component
public class MyComponent {
public void hello() {
System.out.println("Hello from MyComponent!");
}
}
위 코드처럼 @Component를 클래스에 붙이면, Spring이 자동으로 스캔해서 빈으로 등록한다.
@Component를 포함하는 주요 어노테이션
어노테이션 | 역할 |
@Controller | MVC의 Controller 역할 (웹 요청 처리) |
@Service | 비즈니스 로직 담당 |
@Repository | 데이터 접근 계층 (DAO) |
@Component | 그 외 일반적인 Bean |
즉, 우리가 @Service, @Repository 같은 어노테이션을 붙이면, 자동으로 @Component의 기능을 하게 되어 빈으로 등록된다.
스프링 빈 간의 의존관계 주입 (DI)
Spring이 관리하는 Bean끼리는 생성자 주입을 통해 연결할 수 있다.
@Component
public class MyService {
public String getMessage() {
return "Hello from MyService!";
}
}
@Component
public class MyController {
private final MyService myService;
@Autowired
public MyController(MyService myService) { // 생성자 주입
this.myService = myService;
}
public void printMessage() {
System.out.println(myService.getMessage());
}
}
💡 @Autowired를 사용하면, Spring이 MyService 객체를 찾아서 자동으로 주입해준다.
하지만, 스프링 컨테이너에 등록된 객체에만 동작하므로 주의!
2️⃣ 자바 코드로 직접 스프링 빈 등록 (@Bean 사용)
컴포넌트 스캔을 사용하지 않고, 직접 Java 코드로 Bean을 등록할 수도 있다.
이 방법은 외부 라이브러리처럼 우리가 직접 수정할 수 없는 클래스를 빈으로 등록할 때 유용하다.
@Configuration // 스프링 설정 파일로 사용
public class AppConfig {
@Bean
public MyService myService() {
return new MyService();
}
@Bean
public MyController myController(MyService myService) {
return new MyController(myService);
}
}
💡 @Configuration이 붙은 클래스에서 @Bean 메서드를 선언하면, 해당 객체를 Spring 컨테이너에서 관리하는 Bean으로 등록할 수 있다.
이제 AppConfig가 MyService와 MyController를 스프링 컨테이너에 등록해준다.
✅ 컴포넌트 스캔 vs. @Bean 직접 등록, 언제 사용할까?
방식 | 장점 | 단점 | 추천 사용 상황 |
컴포넌트 스캔 (@Component) | 자동 등록으로 편리 | 설정이 필요 없는 단순 클래스에 적합 | 대부분의 경우 권장 |
자바 코드 직접 등록 (@Bean) | 명확한 설정 가능 외부 라이브러리 등록 가능 |
직접 설정해야 함 | 라이브러리 등록 세밀한 제어가 필요할 때 |
🔹 정리
Spring에서 Bean을 등록하는 방법은 컴포넌트 스캔(@Component)과 자바 코드(@Bean) 두 가지가 있다!
• 컴포넌트 스캔(@Component, @Service, @Repository, @Controller)
→ 자동으로 Bean을 등록 (일반적인 경우 사용)
• 자바 코드(@Bean 등록)
→ 명시적으로 직접 Bean을 등록 (라이브러리나 특정 설정이 필요할 때 사용)
둘 다 스프링 컨테이너에서 관리하는 객체를 만들기 위한 방법이므로, 상황에 맞게 선택하면 된다 😊
'BE & Spring' 카테고리의 다른 글
[Java] 프로그래머스 - 가장 큰 수 (정렬) (0) | 2025.02.12 |
---|---|
[COTATO] 백엔드 네트워킹 - Gilded Rose 코드 리팩토링 (0) | 2024.10.30 |
스프링 MVC에서 주로 사용하는 어노테이션 (0) | 2024.01.07 |