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를 생략하는 방법으로 최근 사용
profile
한번 해봅시다.

0개의 댓글