본문 바로가기
Java

[SpringBoot] RestApi 만들기 (4) Service 생성 (의존성 주입)

by bryan.oh 2021. 7. 4.
반응형

@Autowired

지난 포스트에 이어서 service 를 작성하고 있습니다.

시리즈

 

지금까지 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 시리즈

Spring Boot Tutorial 부록

728x90
반응형

댓글