빡코

[스프링]스프링 컨테이너 본문

Java/Spring-boot

[스프링]스프링 컨테이너

chris.djang 2023. 12. 27. 14:19

@Primary 어노테이션을 사용하여 주입 받는 Repository의 우선순위를 결정할 수 있다. 

 

스프링 컨테이너 없이 직접 의존성을 주입도 가능하다. 하지만 사용하는 Repository가 A에서 B클래스로 변경될 경우 직접 전체 코드를 변경해 주어야하는 번거로움이 발생한다. 이런 경우, 스프링 컨테이너를 사용하여 스프링이 직접 의존성을 관리할 수 있게 위임하여 문제를 해결 수 있다. 이것을 제어의 역전이라고 한다.

 

 

 

@RestController
public class BookController {
    private final BookService bookService;
    public BookController(BookService bookService) {
        this.bookService = bookService;
    }
    @PostMapping("/book")
    public void saveBook() {
        bookService.saveBook();
    }
}

 

@Service
public class BookService {
    private final BookRepository bookRepository;
    public BookService(BookRepository bookRepository) {
        this.bookRepository = bookRepository;
    }
    public void saveBook() {
        bookRepository.saveBook();
    }
}

 

Repository A

@Primary
@Repository
public class BookMySqlRepository implements BookRepository{

    @Override
    public void saveBook() {

    }
}

 

Repository B

@Repository
public class BookMemoryRepository implements BookRepository{

    private final List<Book> books = new ArrayList<>();

    public void saveBook() {
        //book.add
    }
}