반응형
@Autowired
지난 포스트에 이어서 service 를 작성하고 있습니다.
시리즈
- 2021.07.03 - [Java] - [SpringBoot] RestApi 만들기 (1) 프로젝트 생성
- 2021.07.03 - [Java] - [SpringBoot] RestApi 만들기 (2) JSON 형식 리턴
- 2021.07.04 - [Java] - [SpringBoot] RestApi 만들기 (3) Log (slf4j+logback)
지금까지 Controller 만 사용했는데, Service 를 만들어서 사용해보겠습니다.
우선 Service class 를 생성합니다.
InfoController 와 같은 depth 에 만듭니다.
InfoService.java
package com.bryan.hello.preword.info;
import java.util.Date;
import org.springframework.stereotype.Service;
import com.bryan.hello.preword.info.model.Project;
@Service
public class InfoService {
public Project getProjectInfo() {
Project project = new Project();
project.projectName = "preword";
project.author = "hello-bryan";
project.createdDate = new Date();
return project;
}
}
@Service 를 class annotation 으로 달아주면 spring은 beanFactory 에 담아두고,
@Autowired 를 사용하는 곳에 해당 bean 을 찾아 주입합니다.
필드 주입
일단 아래 예제를 보면 ( 추천하지 않는 방식입니다 )
선언하는 곳에 @Autowired 를 사용해서 bean 객체 주입을 합니다.
필드주입은 몇가지 문제가 발생할 수 있으므로 생성자 주입 방법을 권장합니다.
생성자 주입을 권장하는 이유는 (간단히만 써보면)
- 순환참조 방지 : A가 B를 참조하고 B가 A를 참조할 때의 문제
- 테스트하기에 좋음
- final 선언 가능
- 오류 방지 : 불변 객체 (final) 또는 null 방지 가능
생성자 주입
@Slf4j
@RestController
public class InfoController {
private InfoService infoService;
@Autowired // spring 4.3 버전 이상부터는 생략 가능
public InfoController(InfoService infoService) {
this.infoService = infoService;
}
@GetMapping("/info")
public Object projectInfo() {
log.debug("/info start");
Project project = infoService.getProjectInfo();
return project;
}
}
(InfoService 에 @Service annotation 이 있어야 합니다)
실행 해보면,
{"projectName":"preword","createdDate":"2021-07-04","project master":"hello-bryan"}
정리
다음엔 Mybatis 로 MySQL 연동 하는 방법을 해보겠습니다.
Spring Boot Tutorial 시리즈
- 2021.07.03 - [Java] - [SpringBoot] RestApi 만들기 (1) 프로젝트 생성
- 2021.07.03 - [Java] - [SpringBoot] RestApi 만들기 (2) JSON 형식 리턴
- 2021.07.04 - [Java] - [SpringBoot] RestApi 만들기 (3) Log (slf4j+logback)
- 2021.07.04 - [Java] - [SpringBoot] RestApi 만들기 (4) Service 생성 (의존성 주입)
- 2021.07.04 - [Java] - [SpringBoot] RestApi 만들기 (5.1) MySQL + JDBC Template. 1
- 2021.07.05 - [Java] - [SpringBoot] RestApi 만들기 (5.2) DBCP - HikariCP
- 2021.07.08 - [java] - [SpringBoot] RestApi 만들기 (5.3) jdbcTemplate - Select
- 2021.07.10 - [Java] - [SpringBoot] RestApi 만들기 (5.4) GetMapping, PostMapping
- 2021.07.10 - [Java] - [SpringBoot] RestApi 만들기 (5.5) jdbcTemplate - Insert, Update, Delete
- 2021.07.11 - [Java] - [SpringBoot] RestApi 만들기 (6) File Upload / Download / List
Spring Boot Tutorial 부록
- 2021.07.02 - [Java] - [eclipse] 이클립스 설치, STS(Spring Tools 4) 설치
- 2021.07.04 - [Java] - [SpringBoot] MyBatis 보다 Spring JDBC 를 사용해야 하는 이유
- 2021.06.19 - [Java] - [Spring-boot] 시작하기 전 알아야 할 것들
- 2021.06.19 - [Java] - [Spring-boot] 수동으로 설정 초기화
- 2021.07.04 - [Java] - Eclipse 에 groovy 설치 하기
- 2021.07.02 - [Java] - [eclipse] 이클립스 설치, STS(Spring Tools 4) 설치
- 2021.07.07 - [Java] - [SpringBoot] Controller 에 Route 적용 (RequestMapping)
728x90
반응형
'Java' 카테고리의 다른 글
Eclipse 에 groovy 설치 하기 (0) | 2021.07.04 |
---|---|
[SpringBoot] MyBatis 보다 Spring JDBC 를 사용해야 하는 이유 (0) | 2021.07.04 |
[SpringBoot] RestApi 만들기 (3) Log (slf4j+logback) (2) | 2021.07.04 |
[SLF4J] slf4j 알고가기 + Logback (0) | 2021.07.03 |
[SpringBoot] RestApi 만들기 (2) JSON 형식 리턴 (2) | 2021.07.03 |
댓글