-
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 (4) 스프링 빈과 의존관계Back-End/Spring 2022. 8. 14. 22:21
스프링 빈과 의존관계
스프링 빈에 등록되면 의존관계가 성립할 수 있다.
스프링 빈 등록 방법
1) 컴포넌트 스캔
2) 자바 코드로 직접 스프링 빈 등록controller와 Member service의 의존 관계
- Member controller가 Member service를 통해 데이터에 접근하고 조회할 수 있어야 한다.Member controller는 Member service에 의존한다.
컴포넌트 스캔과 자동 의존관계 설정
Spring Container
- 웹 서버가 spring container에게 요청을 전달하면 spring container는 정의된 controller 객체를 생성하고 관리 (@Controller annotation)
spring container는 @Controller annotation을 통해 controller를 인식하여 객체로 만들 수 있지만 우리가 만든 service, repository는 단순 자바 코드이기 때문에 인식할 수 없음
annotation을 이용해 spring container가 service와 repository를 인식할 수 있게 해주어야 한다.
= 스프링 빈에 등록해주어야 한다.
컴포넌트 스캔: annotation을 통해 spring bin에 등록 가능
@Controller, @Service, @Repository
모두 컴포넌트의 특수한 케이스이므로, 컴포넌트 스캔으로 스프링 빈에 등록된다.
기본적인 spring 구조
- controller : 요청을 받음
- service : 비즈니스 로직 구현
- repository : 데이터 저장
DI (Dependency Injection, 의존관계 주입)
@Autowired public MemberController(MemberService memberService) { this.memberService = memberService; }
controller 생성자를 통해 controller 객체가 생성될 때 service 객체를 주업해준다.
@Autowired public MemberService(MemberRepository memberRepository) { this.memberRepository = memberRepository; }
service 객체가 생성될 때 repository 객체를 주입해준다.
@Autowired
: 자동 의존관계 설정
스프링 빈에 등록되지 않은 객체는 @Autowired를 통한 DI가 동작하지 않음
자바 코드로 직접 스프링 빈 등록하기
@Configuration public class SpringConfig { @Bean public MemberService memberService() { return new MemberService(memberRepository()); } @Bean public MemberRepository memberRepository() { return new MemoryMemberRepository(); } }
DI
DI에는 필드 주입, setter 주입, 생성자 주입이 존재 ▶ 생성자 주입 권장
- 필드 주입 : 스프링이 처음 실행될 때 상태에서 변경할 수 없기 때문에 권장하지 않음
- setter 주입 : 다른 개발자에 의해 호출되어 변경될 수 있기 때문에 권장하지 않음
스프링 빈 등록
- 실무에서는 정형화된 컨트롤러, 서비스, 리포지토리 같은 코드는 컴포넌트 스캔 사용
- 🌟 정형화되지 않거나 상황에 따라 구현 클래스를 변경해야 하는 경우 설정을 통해 스프링 빈에 등록
메모리 리포지토리가 아직 선정되지 않았다고 가정했기 때문에
컴포넌트 스캔 방식 대신 자바 코드로 스프링 빈 설정'Back-End > Spring' 카테고리의 다른 글
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 (7) AOP (0) 2022.08.21 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 (6) 스프링 DB 접근 기술 (0) 2022.08.21 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 (5) 회원 관리 예제 - 웹 MVC 개발 (0) 2022.08.14 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 (3) 회원 관리 예제 - 백엔드 개발 (0) 2022.08.14 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 (2) 스프링 웹 개발 기초 (0) 2022.08.14