일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 1차원 DP
- 2차원 dp
- 99클럽
- @Builder
- @GeneratedValue
- @GenericGenerator
- @NoargsConstructor
- @Transactional
- Actions
- Amazon EFS
- amazon fsx
- Android Studio
- ANSI SQL
- ApplicationEvent
- assertThat
- async/await
- AVG
- AWS
- Azure
- bind
- builder
- button
- c++
- c++ builder
- c03
- Callback
- case when
- CCW
- chat GPT
- CICD
- Today
- Total
기록
[튜토리얼] 의존성 주입(1) 컴포넌트 스캔 본문
1. 개요
1-1. 의존성주입
이전 예제(2022.08.29 - [backend] - [튜토리얼] spring boot 게시판 curd)에서 생성자를 통해 필요한 요소를 주입받았었다.
위와 같이 의존성 주입(DI)는 외부에서 객체를 생성해서 넣어주는 것을 의미한다. 이를 통해 특정 클래스에 변경사항이 생겼을 때, 다른 클래스는 수정하지 않아도 동작하도록 한다.
1-2. 의존성 주입 방법
의존성을 주입하는 방법에는 크게 세가지가 있다. (1) 컴포넌트 스캔을 이용하는 방법과 (2) 자바 코드로 직접 스프링 빈을 등록하는 방법, (3)xml 파일로 등록하는 방법이 있다. 아래에서는 컴포넌트 스캔에 대해서 다루도록 한다.
2. 코드
2-1. Vo
@Data는 @Getter, @Setter, @ToString 등을 포함하는 어노테이션으로, getter & setter과 toString 메서드를 작성하지 않아도 된다.
2-2. Repository
데이터베이스로부터 데이터를 삽입, 삭제, 생성, 수정 하는 등의 작업이 이루어진다. 해당 프로젝트는 데이터베이스에 따로 연결되지 않은 프로젝트로 Map 객체를 선언하여 일종의 메모리처럼 사용한다.
2-3. Service
서비스는 비즈니스 로직을 작성하는 곳으로, 추후 유지보수를 쉽게 하기 위해서는 회원가입 등 비즈니스에 가까운 용어로 구성하는 것이 유지보수에 유리하다. 생성자를 통해 레파지토리(Dao)를 주입받는다.
2-4. Controller
- @Controller는 주로 View를 반환하기 위해 사용한다. @Controller에서도 @ResponseBody를 달아 객체를 반환할 수 있다.
- @RestController는 @Controller에 @ResponseBody가 추가된 것으로 Json형태로 객체를 반환하기 위해 사용한다. 해당 프로젝트에서는 view를 따로 달지 않아서 @RestController를 사용하였다.
3. 결과
Postman으로 테스트한 결과 제대로 동작함을 확인할 수 있었다.
4. 마무리하면서
4-1. 스프링 컨테이너
스프링 컨테이너라는 스프링에서 자바 객체(빈)을 관리하는 공간이다. 자바 객체(빈)을으로 등록되면 싱글톤 객체를 생성해 컨테이너에 넣어둔다. 해당 객체가 필요할 때마다 컨테이너에서 해당하는 빈을 찾아 사용한다.
4-2. @Autowired
필요한 객체 타입을 확인하여 자동으로 객체를 주입한다. 생성자, setter, 필드에 어노테이션을 지정할 수 있으며, Spring 4.3이상부터는 생성자가 하나인 경우 @Autowired를 생략할 수 있다. @Autowire를 통한 의존성 주입은 스프링이 관리하는 객체에서만 동작한다.
4-3. Component Scan
@Component 어노테이션이 있으면 스프링 빈으로 자동 등록된다. 아래의 어노테이션도 @Controller를 포함한다.
- @Controller
- @Service
- @Repository
@SpringBootApplication에 @ComponentScan 이 포함되어 있으며, 스캐닝되는 범위는 @ComponentScan이 명시된 디렉토리를 포함해서 그 하위 디렉토리를 포함한다.
'Web > Spring' 카테고리의 다른 글
[튜토리얼] 의존성 주입(3) XML (0) | 2022.09.14 |
---|---|
[튜토리얼] 의존성 주입(2) 자바코드 (0) | 2022.09.12 |
[튜토리얼] springboot에 데이터베이스(h2) 연결하기(2) (0) | 2022.09.01 |
[튜토리얼] springboot에 데이터베이스(MySql) 연결하기(1) (0) | 2022.08.31 |
[튜토리얼] spring boot 게시판 curd (0) | 2022.08.29 |