일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 1110
- 백준
- java
- 코딩테스트
- 24479
- 9020
- 카카오클라우드스쿨
- sequelize
- kakaocloudschool
- boj
- 2447
- 11053
- Java #코딩테스트
- Java #백준 #코딩테스트
- 7568
- Spring
- 파이썬
- Spring #Java #Spring Boot #싱글톤
- 15552
- Spring #Java #Spring Boot
- SpringTokenizer
- 알고리즘
- 11054
- Spring #Java #Spring Boot #@BeforeEach #@AfterEach
- kakaocloud
- python
- node
- Java #오븐시계 #백준
- 카카오 클라우드 스쿨
- Spring #Spring Boot #Java
- Today
- Total
YoungSoo
스프링 입문 - 컴포넌트 스캔과 자동 의존관계 설정 본문
스프링 컨테이너가 관리하는 자바 객체를 빈이라고 한다.
여기서 말하는 자바 객체는 new를 통해 생성하는 객체가 아닌 컨테이너에서 스스로 생성하는 객체이다.
컨테이너를 통해 객체를 여러번 생성할 필요가 없고, 공용으로 사용할 수 있다.
스프링 빈을 컨테이너에 등록하는 방법으로는 두 가지 방법이 있다.
오늘 알아볼 방법은 컴포넌트 스캔과 자동 의존관계 설정이다.
MemberController
먼저 MemberController를 만들어준다.
Controller에서 Service를 사용하기 위해 new로 생성해서 사용해줄 수 있지만 여기 뿐만 아니라
다른 곳에서도 Service를 사용할 수 있는데 여러 개의 인스턴스를 생성할 필요가 없고, 하나만 생성해서
공용으로 사용해 좀 더 효율적으로 만들어준다.
공용으로 사용하기 위해서는 스프링 컨테이너에 등록을 하면 가능하다.
생성자를 만들어 @Autowired 어노테이션을 사용해 스프링이 컨터이너에 있는 memberService를 가져다가
연결해준다. 하지만 빨간 줄이 그어져 있는 걸 확인할 수 있는데 그 이유는 memberService가 스프링 빈으로 등록되어 있지 않기 때문이다.
Controller에는 @Controller 어노테이션을 넣어줬기 때문에 스프링 컨테이너에 등록이 된다.
Service에는 @Service 어노테이션을 넣어준다면 이 오류는 해결이 되고 마찬가지로,
Repository에도 @Repository 어노테이션을 넣어준다면 Service에 오류가 해결될 것이다.
이렇게 해두면 스프링 컨테이너에 등록되어 오류가 해결되는 것이다.
스프링 빈 등록 이미지
이제 세 개를 연결 시켜줄 차례인데 @Autowired 어노테이션을 사용하면 된다.
@Autowired를 사용하면 스프링 빈에 등록되어 있는 객체를 넣어준다.
이것을 DI(Dependency Injection 의존성 주입)이라고 한다.
Service에도 마찬가지로 @Autowired를 해준다면 연결이된다.
지금까지 배운 것이 컴포넌트 스캔 원리인데 컴포넌트 스캔이라는 말은 찾아볼 수 없다.
하지만 위에서 한 @Controller, @Service, @Repository 어노테이션이 컴포넌트 스캔 방식이다.
그 이유는 어노테이션 내부를 살펴보면 모두 @Component 어노테이션이 들어가 있는 것을 확인할 수 있다.
마지막으로 아무곳이나 컴포넌트 스캔은 되지 않는다.
그 이유는 HelloSpringApplication을 실행하는데 hello.hellospring 패키지 하위의 패키지들은 전부
자동으로 스프링 빈으로 등록하지만 하위 패키지가 아니라면 따로 등록해야할 수 있다.
또한 스프링은 스프링 컨테이너에 스프링 빈을 등록할 때, 기본으로 싱글톤으로 등록한다.(유일하게 하나만
등록해서 공유한다). 따라서 같은 스프링 빈이면 모두 같은 인스턴스다. 설정으로 싱글톤이 아니게 설정할 수
있지만, 특별한 경우를 제외하면 전부 싱글톤을 사용한다.
싱글톤이란 : 싱글톤이란 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴 이름이다.
해당 글은 김영한 님의 인프런 강의를 보고 정리한 글 입니다.
[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의
스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., - 강의 소개 | 인프런...
www.inflearn.com
'BE > Spring' 카테고리의 다른 글
스프링 입문 - 회원 웹 기능(홈 화면 추가) (0) | 2022.07.07 |
---|---|
스프링 입문 - 자바 코드로 스프링 빈 등록하기 (0) | 2022.07.07 |
스프링 입문 - 회원 서비스 테스트 (0) | 2022.07.07 |
스프링 입문 - 회원 서비스 개발 (0) | 2022.07.07 |
스프링 입문 - 회원 리포지토리 테스트 케이스 작성 (0) | 2022.07.07 |