컴포넌트를 이용하는 방법은 자동으로 빈을 등록해주는 것이었다. 이번에는 자바 코드로 직접 빈을 등록해보자.
❓왜 자동이 있는데 수동으로 빈을 등록하는가?❓
-> 세밀한 제어, 외부 라이브러리 통합 등 복잡하고 특정한 요수사항을 처리할 수 있다는 점이 있다.
-> 우리가 수동으로 빈을 등록하는 것을 채택한 가장 큰 이유는 나중에 Repository에서 DB로 쉽게 변경하기 위해서 이다.
1. 자바를 작성할 config 파일 만들기
파일 경로: src/main/java/SpringConfig
해당 경로에 SpringConfig 파일을 만든다.
2. 코드 작성하기
package section4.section4_spring;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import section4.section4_spring.repository.MemberRepository;
import section4.section4_spring.repository.MemoryMemberRepository;
import section4.section4_spring.service.MemberService;
@Configuration
public class SpringConfig {
@Bean //빈을 등록할거야!
public MemberService memberService() {
return new MemberService(memberRepository()); //의존성 주입
}
//위 전체 작업은 객체를 생성하고 그 객체를 반환하는 메소드이다.
@Bean //빈을 등록할거야!
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
//위 처럼 진행하면 스프링 컨테이너에 서비스와 레포지토리가 등록이 되고 서비스에 레포지토리가 주입된다.
}
- @Configuration
- 스프링에게 이 클래스가 설정 파일임을 알려주는 어노테이션이다.
- 이 클래스 내부에는 빈을 정의하는 메서드들이 있고, 스프링은 이 메서드들을 호출하여 빈을 생성하고 관리한다.
- public ... () { ... }
- 객체를 생성하고 객체를 반환한다.
- 객체를 반환할 때 의존성 주입을 할 수 있다.
❓ 왜 Controller는 빈으로 등록하지 않는건가? ❓
1. 유연한 구성과 관리: 컨트롤러는 주로 요청을 처리하는 역할을 하기에 복잡한 설정이 필요하지 않다.
2. 특정 설정이 필요 없는 경우: 컨트롤러는 일반적으로 특정 설정이 필요하지 않고, MVC를 따르기 때문에 자동이 편리하다.
3. 의존성 주입과 관리 편의성: 컨트롤러는 주로 서비스 계층에 의존하므로, 자동으로 등록해도 충분히 관리가능하다.
4. 일반적인 패턴 따르기: 스프링에서는 컨트롤러를 자동으로 등록하는 것이 일반적인 패턴이다.
번외) Repository를 DB로 변경해보기
//[Repository]
@Configuration
public class SpringConfig {
@Bean
public MemberService memberService() {
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
}
//[DB]
@Configuration
public class SpringConfig {
@Bean
public MemberService memberService() {
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new DatabaseMemberRepository(dataSource()); //DB 변경 부분
}
}
'Server > Spring' 카테고리의 다른 글
회원 관리 - 프론트) 2. 회원 등록하기 (0) | 2024.08.25 |
---|---|
회원 관리 - 프론트) 1. 홈화면 추가하기 (0) | 2024.08.25 |
스프링 빈 등록하기 - 1. 컴포넌트 스캔과 자동 의존관계 설정 (0) | 2024.08.25 |
회원관리 - 백엔드 개발) 4. 회원 서비스 테스트하기 (0) | 2024.08.25 |
회원관리 - 백엔드 개발) 3. 회원 서비스 개발하기 (0) | 2024.08.24 |