SpringBootApplication이 동작하는 방식 run 메서드 안에 파라미터로 집어넣으면 스프링 빈으로 등록된다. run 메서드 내부적으로 ConfigurableApplicationContext를 생성한다. 이것이 스프링 컨테이너 자체이다. ComponentScan을 사용하려면 해당 어노테이션이 붙어있는 클래스가 스프링 빈으로 등록되야 한다. 빈을 찾으려면 따로 DL 기능을 제공하는 ObjectProvider를 사용하기 ObjectProvider로 찾아올때 객체의 생성, 의존관계 주입 및 초기화 까지는 스프링 컨테이너가 제공해준다. 그 뒤 반환하고 나면 컨테이너가 관리하지 않는다. 싱글톤 방식 정리 ComponentScan은 무조건 객체를 스프링 빈으로 싱글톤 등록해준다. 설정 정보에 @Confi..
springboot
스프링 빈은 생성부터 종료까지 일정한 생명주기를 가진다. 스프링 컨테이너 생성 -> 스프링빈 객체 생성 -> 의존 관계 주입 -> 기능 동작 -> 스프링 빈 종료 -> 프로그램 종료 스프링 빈으로 등록된 객체를 정상 사용하려면 의존 관계까지 완벽하게 주입 완료된 상태여야 한다. 만약 의존 관계 주입이 완료되지 않은 상태에서 의존 관계 주입 대상을 사용한 로직을 수행한다면 NULL 값이 뜰 수 밖에 없다. 또한 스프링 빈으로 등록된 객체에서 네트워크 소켓 연결이나 DB 연결을 사용한다면 어플리케이션 종료 시점에 커넥션을 잘 끊어줘야 자원의 낭비나 오류를 막을 수 있다. 이를 해결하려면 우리는 스프링 빈의 의존관계 주입 완료 시점과 스프링빈 종료 시점을 파악할 수 있어야 한다. 스프링에서는 이 시점들을 알려..
싱글톤 패턴 싱글톤 패턴은 애플리케이션이 시작 될 때 static을 통해 인스턴스를 메모리에 딱 하나 할당하고, 뒤의 호출 시 마다 해당 인스턴스를 반환해주는 디자인 패턴이다. 생성자를 private으로 설정하기 때문에 외부에서 생성자를 통해 인스턴스를 만들 수 없다. public class NoteBook { private static NoteBook noteBook = new NoteBook(); public static NoteBook getInstance() { return noteBook; } private NoteBook(){}; } NoteBook이라는 클래스를 간단히 싱글톤 패턴으로 구현한 코드다. 보통의 경우 생성자를 public으로 열어서 사용자가 직접 인스턴스를 생성해서 사용하도록 한..
스프링은 객체 지향의 SOLID 원칙을 지키기 위해 어플리케이션을 동작 시키는 사용 영역과, 각 객체들의 생성과 의존관계 주입을 책임지는 구성 영역으로 코드를 분리 시킵니다. 단순 자바코드로 config 클래스를 만든 후 사용 영역에 주입할 수도 있지만 스프링은 어노테이션 기반으로 사용할 수 있는 스프링 컨테이너와 스프링 빈을 제공합니다. 스프링 컨테이너 생성 스프링 컨테이너는 ApplicationContext 라는 인터페이스를 통해 사용할 수 있습니다. ApplicationContext ac = new AnnotationConfigApplicationContext(); 코드를 보면 ApplicationContext의 실제 구현체로는 AnnotationConfigApplicationContext 가 들어..