스프링을 사용하다보면, 아래의 에러코드를 한 번쯤은 만나 봤을 겁니다.
해당 에러는 보통 DI를 하려고 할 때, 그 해당 컴포넌트가 Bean으로 등록 되지 않아서 생기는 메시지 입니다.
오늘 포스트에서는 Spring Container에 Bean으로 등록하는 2가지 방법에 대해 정리해보고자 합니다.
Parameter 0 of constructor in hi.hispring.controller.MemberController required a bean of type 'hi.hispring.service.MemberService' that could not be found.
Action:
Consider defining a bean of type 'hi.hispring.service.MemberService' in your configuration.
목차
1. Component Scan
2. 직접 등록 방식
3. 언제 무엇을 쓰는가?
Component Scan
이 방법은 간단하다. @Component 어노테이션만 붙여주면, 스프링 컨테이너에 스프링 빈으로 등록됩니다.
따라서, @Component를 포함하는 아래의 어노테이션도 스프링 빈으로 자동으로 등록됩니다..
- @Controller
- @Service
- @Repository
아래처럼 간단히 달아주면, DI를 할 때 더 이상 에러가 발생하지 않을 것입니다.
@Service
public class TestService{
...
}
이 방법은 매우 간단하므로, 바로 자바 코드를 이용하여 직접 스프링 빈으로 등록해주는 방법에 대해 알아보겠습니다.
자바코드로 직접 등록
이 방법은 @Component 어노테이션을 사용하지 않고, 코드로 직접 빈으로 등록해주는 방법입니다.
바로 코드를 보며 설명 해 보도록 하겠습니다.
//1.
@Configuration
public class SpringConfig{
//2.
@Bean
public TestService testService(){
//3.
return new TestService();
}
}
- @Configuration 어노테이션을 이용하여 해당 클래스가 설정 파일임을 알려줍니다.
참고로, @Configuration은 @Component를 포함하고 있으므로 해당 클래스는 자동으로 스프링 빈으로 등록됩니다. - @Bean 어노테이션을 이용하여 아래 메소드를 이용하여 생성된 클래스를 스프링 빈으로 등록 할 것임을 알려줍니다.
- Bean으로 등록하고자 하는 클래스를 생성하여 리턴 해줍니다.
만약, 해당 클래스를 생성할 때 DI가 필요하다면, 적절히 import 해서 생성자의 인자로 넣어주면 됩니다.
언제 무엇을 쓰는가?
2가지 방법이 어렵지는 않기에 금방 습득 할 수 있지만, "그래서 뭘 쓰라고?" 라는 고민이 생기게 됩니다.
"컴포넌트 스캔 방식을 이용하면 간단한데 굳이 코드로 직접 해야 하나?" 라고 생각 하는 분들 도 생길 것 이구요.
실무에서는 주로 정형화되어 있는 Controller, Service, Repository와 같은 기본적인 코드는 간단한 컴포넌트 스캔방식을 사용합니다.
그리고, 정형화 되지 않았고, 상황에 따라 구현 클래스를 변경해야 하는 상황이라면 설정 코드를 통해 직접 빈을 등록합니다.
정형화 되지 않았고, 상황에 따라 구현 클래스를 변경해야 하는 경우의 예시는 아래와 같은 케이스들이 있을 것 입니다.
- AOP
- DB가 결정되지 않아 임시 DB를 사용하다, 추후 다른 DB로 바꿀 예정인 경우
'java,springboot' 카테고리의 다른 글
Spring - DI 세가지 방법 (생성자 방식이 좋은 이유 with code) (0) | 2023.04.19 |
---|---|
[springboot] 부모 클래스 생성자 에러 해결 - 생성자 주입 방식 (0) | 2023.04.18 |
vscode에서 gradle로 springboot 개발환경 설정 (0) | 2023.03.01 |
parameter 1 of constructor in required a bean of type that could not be found (0) | 2023.02.27 |
Ljava.lang.Object 읽을 수 있게 만들기(List 타입 콘솔 찍기) (0) | 2023.02.17 |