1. 스프링 컨테이너
- 스프링 컨테이너는 BeanFactory, ApplicationContext로 구분되어 이야기 된다.
일반적으로는 ApplicationContext를 스프링 컨테이너라고 부른다.
컨테이너 생성
Application applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
AppConfig.class 는 설정정보
- 스프링컨테이너에는 스프링 빈 저장소가 있다. 스프링 빈 등록방법
- 클래스 레벨에 @Configuration 사용
- @Bean 빈으로 등록 할 메서드에 사용
빈 이름은 메서드명의 첫자만 소문자로 변경된다.
ex) AbcDef -> abcDef
빈이름은 항상 다른 이름을 부여해야한다.
싱글톤 컨테이너
- 스프링의 싱글톤 컨테이너는 싱글톤 패턴을 적용하지 않아도, 객체 인스턴스를 싱글톤으로 관리한다.
- 싱글톤 패턴
- 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴
- 예를 들면 고객 요청이 많은 수가 요청시에 객체를 계속 새로 생성하다보면 메모리 낭비가 심하여 해당 문제점을 해결하기 위한 패턴
- @Bean 만 사용시 싱글톤을 보장하지 않는다.
- @Configuration 을 사용하여 @Bean 등록 메서드를 싱글톤을 보장해줘야 한다.
컴포넌트 스캔 (@ComponetScan)
- 컴포넌트 스캔은 @Component 애노테이션이 붙은 클래스를 스캔해서 스프링 빈으로 등록한다.
- 컴포넌트 스캔 기본대상
- @Component
- @Controller
- @Service
- @Repository
- @Configuration
- 해당 에노테이션은 @Component를 포함하고 있음
- @Autowired
- 생성자에 @Autowired 사용시 스프링 빈을 찾아서 의존관계 자동 주입한다.
의존관계 주입
- 의존관계 주입 방법은 크게 4가지로 생성자 주입, 수정자 주입, 필드 주입, 메서드 주입이 있다.
- 기본으로는 생성자 주입을 사용한다.
@Autowired를 사용하여 생성자 주입 사용
생성자가 하나인 경우 @Autowired 생략가능
스프링 애노테이션 정리
- @Bean : 수동으로 메서드를 스프링 빈으로 등록시 사용
보통 개발자가 컨트롤이 어려운 외부 라이브러리 사용시 사용
해당 메서드를 싱글톤으로 관리 하려면 @Configuration과 함꼐 사용
- @Component : 자동으로 클래스를 스프링 빈으로 등록시 사용
- @ComponentScan : @Component로 등록 된 빈을 스캔
- @Controller : 스프링 MVC 컨트롤러 인식
- @Repository : 스프링 데이터 접근 계층으로 인식
- @Configuration : 스프링 설정정보로 인식
- @Service : 특별한 처리를 하지 않고, 핵심 비지니스 로직이 있다 표시하기 위함
- @Controller,@Repository,@Configuration,@Service는 @Component를 포함 하고 있음
- @Autowired : 생성자에 사용하고, 스프링 빈을 찾아서 자동 의존성 주입
생성자가 하나일 경우 생략가능
- @PostConstruct : 객체가 생성된 후, 별도의 초기화 작업을 위해 실행하는 메서드에 선언한다.
- @PreDestroy : 스프링 컨테이너에서 객체(빈)를 제거하기 전에 해야할 작업이 있다면 실행할 메서드에 선언한다.
롬복 (lombok 라이브러리)
- @RequiredArgsConstructor : final이 붙은 필드를 모아서 생성자를 자동 생성
해당 에노테이션을 사용하여 생성자를 딱 1개 두고, @Autowired를 생략하는 방법으로 최근 사용