728x90
DI란? = Dependency Injection (의존성 주입)
- 객체 의존관계를 외부에서 넣어주는 것 = 의존성 주입
- Controller에서 객체 사용 시, new 키워드를 통해 컨트롤러에서 직접 생성 x => 스프링 컨테이너에 생성된 객체를 받아 사용
- 코드의 재사용성 증가, 코드의 유지보수성 향상, 객체 간의 결합도 감소, 단위 테스트 용이성 증가라는 장점을 가짐
컴포넌트 스캔 방식
- @Component 애노테이션이 있으면 스프링 빈으로 자동 등록
- @Controller 컨트롤러가 스프링 빈으로 자동 등록된 이유도 컴포넌트 스캔때문
- @Component를 포함하는 애노테이션도 스프링 빈으로 자동 등록
(@Controller, @Service, @Repository)
회원 컨트롤러에 의존관계 추가
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;
}
}
회원 서비스 스프링 빈 등록
@Service
public class MemberService {
private final MemberRepository memberRepository;
@Autowired
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
}
- 생성자에 @Autowired가 있으면 스프링이 연관된 객체를 스프링 컨테이너에서 찾아서 넣어준다.
- 스프링에선 @Autowired에 의해 의존성이 주입될 수 있다.
(참고 : @Autowired를 통한 의존성 주입은 스프링이 관리하는 객체에서만 동작한다./ 스프링 빈으로 등록하지 않고 직접 생성한 객체에서는 동작하지 않는다.)
@Repository
public class MemoryMemberRepository implements MemberRepository {
}
=====> memberService와 memberRepository가 스프링 컨테이너에 스프링 빈으로 저장되어있음
'Coding > Spring(Boot)' 카테고리의 다른 글
| [Spring]회원 웹 기능 - 등록 (0) | 2024.06.11 |
|---|---|
| [Spring]자바 코드로 직접 spring bean 등록 (2) | 2024.06.11 |
| [Spring]회원 서비스 개발(+ test case) (0) | 2024.06.10 |
| [Spring]repository test case 작성 (0) | 2024.06.09 |
| [Spring]정적컨텐츠/MVC/API (2) | 2024.06.09 |