Book이라는 객체를 생성하고, 관리하는 서비스 예제를 제작하겠다.
package com.rptp.rptpSpringBoot.model;
public class BookDTO {
Long id;
String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.rptp.rptpSpringBoot.repository;
import com.rptp.rptpSpringBoot.model.BookDTO;
import java.util.List;
import java.util.Optional;
public interface BookRepository {
BookDTO save(BookDTO bookDTO);
Optional<BookDTO> findById(Long id);
Optional<BookDTO> findByName(String name);
Optional<BookDTO> deleteById(Long id);
List<BookDTO> findAll();
}
package com.rptp.rptpSpringBoot.repository.impliment;
import com.rptp.rptpSpringBoot.model.BookDTO;
import com.rptp.rptpSpringBoot.model.MemberDTO;
import com.rptp.rptpSpringBoot.repository.BookRepository;
import java.util.*;
public class MemoryBookRepository implements BookRepository {
private static Map<Long, BookDTO> store = new HashMap<>();
private static long sequence = 0L;
@Override
public BookDTO save(BookDTO bookDTO) {
bookDTO.setId(++sequence);
store.put(bookDTO.getId(),bookDTO);
return bookDTO;
}
@Override
public Optional<BookDTO> findById(Long id) {
return Optional.ofNullable(store.get(id));
}
@Override
public Optional<BookDTO> findByName(String name) {
return store.values().stream()
.filter(bookDTO -> bookDTO.getName().equals(name))
.findAny();
}
@Override
public Optional<BookDTO> deleteById(Long id) {
BookDTO bookDTO = store.get(id);
return Optional.ofNullable(store.remove(id));
}
@Override
public List<BookDTO> findAll() {
return new ArrayList<>(store.values());
}
}
package com.rptp.rptpSpringBoot.service;
import com.rptp.rptpSpringBoot.model.BookDTO;
import com.rptp.rptpSpringBoot.model.MemberDTO;
import com.rptp.rptpSpringBoot.repository.BookRepository;
import com.rptp.rptpSpringBoot.repository.MemberRepository;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List;
import java.util.Optional;
public class BookService {
private final BookRepository bookRepository;
public BookService(BookRepository bookRepository) {
this.bookRepository = bookRepository;
}
//책 등록
public Long register(BookDTO bookDTO) {
// 같은 이름의 책 x
validateDuplicateMember(bookDTO);
bookRepository.save(bookDTO);
return bookDTO.getId();
}
private void validateDuplicateMember(BookDTO bookDTO) {
bookRepository.findByName(bookDTO.getName())
.ifPresent(m -> {
throw new IllegalStateException("이미 존재하는 책입니다");
});
}
//전체 책 조회
public List<BookDTO> findBooks() {
return bookRepository.findAll();
}
// id에 맞는 회원 조회
public Optional<BookDTO> findOne(Long bookId) {
return bookRepository.findById(bookId);
}
// 책 제거
public Optional<BookDTO> removeBook(Long bookId) {
return bookRepository.deleteById(bookId);
}
}
package com.rptp.rptpSpringBoot.controller;
import com.rptp.rptpSpringBoot.service.BookService;
import com.rptp.rptpSpringBoot.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
public class BookController {
private final BookService bookService;
public BookController(BookService bookService) {
this.bookService = bookService;
}
}
package com.rptp.rptpSpringBoot;
import com.rptp.rptpSpringBoot.controller.BookController;
import com.rptp.rptpSpringBoot.repository.BookRepository;
import com.rptp.rptpSpringBoot.repository.impliment.MemoryBookRepository;
import com.rptp.rptpSpringBoot.service.BookService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@Configuration
public class SpringConfig {
@Bean
public BookController bookController() {
return new BookController(bookService());
}
@Bean
public BookService bookService() {
return new BookService(bookRepository());
}
@Bean
public BookRepository bookRepository() {
return new MemoryBookRepository();
}
}
Bean을 설정하는 클래스임을 명시
Bean을 생성하는 메서드임을 명시