컴포넌트 스캔과 자동 의존관계 설정
: 회원 컨트롤러가 회원서비스와 회원 리포지토리를 사용할 수 있도록 의존관계 준비
회원 컨드롤러 의존관계 추가
package hello.hellospring.controller;
import hello.hellospring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@Controller
public class MemberController {
private final MemberService memberService;
@Autowired
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
}
@Autowired
스프링이 연관된 객체를 스프링 컨테이너에 찾아 삽입
DI
Dependency Injection, 의존성 주입, 객체 의존관계를 외부에서 넣어주는 것을 의미
@Qutowired에 의해 스프링 주입
memberServie 스프링 빈 등록 전
: error message
Consider defining a bean of type 'hello.hellospring.service.MemberService' in your configuration.
* helloController는 @Controller를 이용해 자동 등록
스프링 빈 등록 방법
- 컴포넌트 스캔과 자동 의존관계 설정
- 자바 코드로 직접 스프링 빈 등록
컴포넌트 스캔
@Component: 애노테이션이 있는 경우 스프링 빈 자동 등록
* 컴포넌트 스캔으로 @Controller 컨트롤러가 스프링 빈으로 자동 등록
@Component를 포함하는 애노테이션도 스프링 빈 자동 등록
- @Controller
- @Service
- @Repository
회원 서비스 스프링 빈 등록
@Service
public class MemberService {
private final MemberRepository membeRepository;
@Autowired
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
}
* 생성자에 @Autowired를 사용하는 경우, 객체 생성 시, 스프링 컨테이너에서 해당 스프링 빈을 찾아서 주입, 생성사자 1개인 경우 생략 가능
@Repository
public class MemoryMemberRepository implements MemberRepository {}
: memerService와 memberRpository가 스프링 컨테이너에 스프링 빈으로 등록됨
자바 코드로 직접 스프링 빈 등록
: 회원 서비스와 회원 리포지토리의 @Service, @Repository, @Autowired 애노테이션 제거 후 진행
package hello.hellospring;
import hello.hellospring.repository.MemberRepository;
import hello.hellospring.repository.MemoryMemberRepository;
import hello.hellospring.service.MemberService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SpringConfig {
@Bean
public MemberService memberService() {
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
}
* 향후 메모리 리포지토리를 변경할 예정이므로 컴포넌트 스캔 대신 자바 코드 사용
'백엔드 > 인프런_스프링' 카테고리의 다른 글
6. 스프링 DB 접근 기술 (0) | 2024.11.23 |
---|---|
5. 회원 관리 예제 - 웹 MVC 개발 (1) | 2024.11.16 |
3. 회원 관리 예제 - 백엔드 개발 (0) | 2024.11.16 |
2. 스프링 웹 개발 기초 (2) | 2024.11.09 |
1. 프로젝트 환경 설정 (1) | 2024.11.09 |