일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- bootstrap
- 빌드
- 자동형변환
- https://start.spring.io
- maven
- 컬렉션
- 콜렉션
- 스프링
- unboxing
- suvlet
- 무한
- Short
- 제네릭
- wrapper
- 싱글톤
- 메소드
- 루프
- Jenkins
- Scanner
- dependency
- boxing
- 클래스
- Java
- 박싱
- 싱글턴
- start.spring.io
- 언박싱
- 내장객체
- 인텔리제이
- 제너릭
- Today
- Total
Developer Gonie
[스프링 부트] 14. 스프링빈을 등록하는 방법1 본문
스프링빈을 등록하는 2가지 방법
* 두가지 방법을 모두 알고 있어야 한다.
방법1. 컴포넌트 스캔과 자동 의존관계 설정
방법2. 자바 코드로 직접 스프링빈 등록하기
이번 게시물에서는 방법1 을 배워보고, 다음 게시물에서 방법2 를 배워본다.
MemberController가
MemberService를 통해 회원가입하고,
MemberService를 통해 데이터를 조회할 수 있어야 한다.
이런 관계를 서로 의존관계가 있다 라고 표현하는데
MemberController가 MemberService에 의존한다라고 말한다.
이제 이 작업을 스프링 스럽게 해볼 것이다.
1. MemberController 클래스 추가
2. MemberController 클래스에 @Controller 어노테이션 부착
여기까지 해두면 기능은 아무것도 없지만
스프링이 실행되면 스프링 컨테이너라는 통이 생기는데
@Controller 어노테이션이 있으면
여기에 이 클래스의 객체를 자동으로 생성해서 그 통에 넣어두게 됨
3. MemberController에 MemberService 관련 멤버변수, 생성자 추가
MemberController가
MemberService를 통해 회원가입하고, MemberService를 통해 데이터를 조회할 수 있어야 하기 때문에
MemberService 관련 멤버변수 및 생성자를 추가해줌.
4. MemberController의 생성자에 @Autowired 어노테이션 부착
스프링 컨테이너가 관리중인 MemberService 객체를 인자부분에 자동으로 연결되도록 함.
5. MemberService 클래스에 @Service 어노테이션 부착
컨테이너가 4번의 작업을 정상적으로 하려면 MemberService의 객체가 스프링빈에 등록되어 있어야 하는데
이 어노테이션을 사용하면 해당 클래스의 객체를 스프링빈에 등록할 수가 있음
6. MemoryMemberRepository 클래스에 @Repository어노테이션 부착
??? 무슨의미지?
1. 클래스 + @Controller 어노테이션 ***
이 어노테이션은 클래스 이름 상단에 위치하게되며,
이게 클래스 정의 상단에 붙어있으면 내부에 코드가 아무것도 없을지라도
스프링이 실행되면 이 클래스의 객체를 자동으로 생성해서,
컨테이너라는 공간에 넣어두게 되고 이를 스프링이 관리하게 된다.
이걸 스프링 컨테이너에서 스프링 빈이 관리된다고 표현한다.
스프링 컨테이너에 등록되게 하면 해당 클래스에 대해서 단 1개의 객체만 생성되어 공유되는 것이 특징이다.
이전에 HelloController 클래스 상단에도 @Controller 어노테이션이 붙어있었는데,
스프링 컨테이너에 해당 클래스의 객체가 자동으로 생성되어 관리되고 있었기 때문에
내부의 @GetMapping 어노테이션에 따라 url 별로 다른 화면을 던져준 것이 잘 동작하는 것이었음
package hello.hellospring.controller;
import org.springframework.stereotype.Controller;
@Controller
public class MemberController {
}
2. 생성자 + @Autowired어노테이션 ***
바로 위에서 컨테이너에 담아둘 클래스의 객체가 자동으로 생성되어 담긴다고 하였다.
그렇다면 이 클래스의 생성자가 호출될텐데, 이때 생성자의 인자로 다른 클래스의 객체를 받는 경우가 있을 것이다.
이때 스프링은 생성자 위에 @Autowired 어노테이면이 있다면
스프링 컨테이너에 존재하는 관리중인 객체들 중, 인자로 받아야 하는 객체를 찾아서 자동으로 연결해준다.
아래에서는 스프링 컨테이너가 관리중인 객체중에 MemberService 타입의 객체가 자동으로 연결될 것으로 보인다.
단, 그 전에 스프링 컨테이너가 MemberService 클래스의 객체를 관리하도록 MemberService 클래스를 스프링빈에 등록해 뒀어야 자동 연결이 가능하다.
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;
}
}
3. 일반 java 파일 + @Service어노테이션
이 어노테이션을 사용하면 해당 클래스의 객체를 스프링빈에 등록해 스프링 컨테이너가 관리하도록 한다.
바로위에서 빨간글씨로 언급한 부분인데, 이 방식이 일반 java 클래스를 스프링빈에 등록하는 첫번째 방법이다.
@Service
public class MemberService {
...
}
4. 일반 java 파일 + @Repository어노테이션
'인프런 김영한님 강의 > 1 . 스프링 부트 입문' 카테고리의 다른 글
[스프링 부트] 14-2. 스프링빈을 등록하는 방법2 (0) | 2022.06.27 |
---|---|
[스프링 부트] 13. 회원 서비스 테스트 (0) | 2022.06.26 |
[스프링 부트] 12. 회원 서비스 개발 (0) | 2022.06.26 |
[스프링 부트] 11. 회원 리포지토리 테스트 케이스 작성 (0) | 2022.06.26 |
[스프링 부트] 10. 회원 도메인과 리포지토리 만들기 (0) | 2022.06.23 |