간단히말해, 기존에 작성한 Service 와 Repository, Controller 를 @Service, @Repository, @Controller 어노테이션을 이용하여 Spring Container 가 자동으로 Bean 에 등록하고, 의존관계를 설정할 수 있도록 한다.
Spring Bean 을 등록하는 방법에는 두 가지가 있다.
- Component Scan 으로 자동 의존관계 설정 - @Component : @Controller, @Service, @Repository
- 자바 코드로 직접 Spring Bean 에 등록
이번에 알아볼 방법은 1번이다.
controller > MemberController 생성
**@Controller 를 설정했을 때 벌어지는 일
- 한마디로 Spring container에서 Bean이 관리된다.
- 즉, Spring container 가 @Controller를 인식하여 MemberController 라는 객체를 생성하여 Spring container에 넣어 관리할 수 있게 한다.
- 그리고 이렇게 추가된 MemberController가 사용될 때, MemberController의 생성자를 호출한다!!
- 참고
[스프링 웹 개발 기초 - (2)] MVC와 템플릿 엔진
hello-mvc -> helloMvc 추가 @RequestParam 으로 query string 의 name 속성을 추가하여 인자로 name 을 받아 model의 name 속성의 value 로 매핑하고, 뷰 리졸버가 template/hello-template.html 에 전달 - Thy..
rezal.tistory.com
MemberService 에 대한 controller 이므로 MemberService 인스턴스를 그냥 생성하면?
- MemberService를 다른 Controller에서도 사용할 수 있기 때문에, Spring Container 에 MemberController 객체의 MemberService 를 가져다가 쓸 수 있도록 설정해야함
- 그리고 MemberController에서 MemberService의 모듈을 사용할 필요가 없을때, 불필요하게 MemberService 인스턴스를 생성해야하는 경우를 방지
- 즉, MemberController 와 MemberService 를 Spring Container에 별도로 등록하고, 분리시켜야한다.
@Autowired 를 사용했을 때 벌어지는 일
- 기본적으로 Spring Container에 등록되면 사용될 때 생성자를 호출한다.
- 이 때, @Autowired를 사용하면 MemberController 생성자의 인자인 MemberService 객체를 Spring Container에서 불러서 연결을 시켜준다!!
- 이렇게 객체 의존 관계를 외부에서 넣어주는 것을 DI(Depnedency Injection), 의존성 주입이라고 한다.
- 하지만, 현재는 MemberService 가 Spring Container 에 등록되어 있지 않아, 'could not be found' 에러가 발생한다.
- 즉, MemberService 는 순수 자바 클래스라 Spring이 알 수 있는 방법이 없으므로, MemberService class 에 @Service 를 추가하여 Spring Container 에 객체로서 관리될 수 있도록 추가해주어야 한다.
MemberService, MemoryMemberRepository
- MemberService 에서 MemberRepository 등도 사용되므로, 의존관계를 설정해주기 위해 repository 도 @Repository 로 연결시켜 준다. -> 구현체인 MemoryMemberRepository 에 연결
- MemberService 도 MemberRepository 를 구현한 MemoryMemberRepository와 연결되어야하므로, @Autowried를 생성자에 추가해준다.
주의할점
main method 를 실행하는 패키지의 하위에서 Spring container 가 @Component 를 Scan 하기 때문에, Scope 를 고려하여 의존관계를 설정해야한다.
'Java > 스프링 입문 - 스프링 부트, 웹 MVC, DB 접근 기술' 카테고리의 다른 글
[회원 관리 예제 : 웹 MVC 개발] 홈, 회원 등록, 회원 조회 (0) | 2022.07.01 |
---|---|
[Spring Bean과 의존관계 - (2)] Java Code 로 직접 Spring Bean 에 등록하기 (0) | 2022.07.01 |
[회원 관리 예제, 백엔드 개발 - (5)] 회원 서비스 테스트 (0) | 2022.06.30 |
[회원 관리 예제, 백엔드 개발 - (4)] 회원 서비스 개발 (0) | 2022.06.30 |
[회원 관리 예제, 백엔드 개발 - (3)] 회원 리포지토리 테스트 케이스 작성 (0) | 2022.06.29 |