IoC, DI, Bean, 스프링 컨테이너

두별·2021년 11월 30일
0

Spring Framework

목록 보기
5/18
post-thumbnail

패캠 스프링 초격차 Part1. Spring Framework-Ch.02 필기노트

IoC (Inversion of Control), DI (Dependency Injection)

  • IoC나 DI는 레고와 같은 것이다.
    - 스프링이 바닥판처럼 깔려있고, 우리는 그 위에서 멋진 조립을 만든다. (애플리케이션)
    - 레고 -> class끼리 알아서 연결
    - 외부 장난감 -> 그냥 Java Class

Bean이란?

  • 자바에서의 JavaBean
    - 데이터를 저장하기 위한 구조체로 자바 빈 규약이라는 것을 따른다.
    • private 프로퍼티와 getter/setter로만 데이터를 접근
public class JavaBean {
    private String id; // private : 접근 제어자
    private Integer count;

    public String getId(){
        return id;
    }

    public void setId(String id){
        this.id = id;
    }

    public Integer getCount(){
        return count;
    }

    public void setCount(Integer count){
        this.count = count;
    }
}
  • Spring에서의 Bean
    - 스프링 IoC 컨테이너에 의해 생성되고 관리되는 객체
    • 자바처럼 new Object();로 생성하지 않음
    • 각각의 Bean들끼리는 서로를 편리하게 의존, 사용할 수 있음
    • IoC == bean을 관리하는 컨테이너 (Spring Application Context 기반으로 동작)
    • bean을 등록하는 설정값을 정해주면 IoC 컨테이너 안에 등록이 된다. (bean이 리스트로 등록 = 우리가 만든 클래스를 그대로 쓰는게 아니라 스프링의 싱글턴 타입 , 단일객체로 만들고 SAC의 온갖 설정값을 입혀준다.)

스프링 컨테이너

  • ApplicationContext 인터페이스를 통해 제공되는 스프링 컨테이너는 Bean객체의 생성 및 조립, 상호 의존성 관리를 담당

  • Bean의 등록
    - 과거에는 xml로 설정을 따로 관리하여 등록 (불편)
    - 현재는 anotation 기반으로 Bean 등록
    - @Bean, @Controller, @service

  • Bean 등록시 정보
    - Class 경로

    • Bean의 이름 : 예) testService, testDao...
    • Scope : Bean을 생성하는 규칙
      • singleton : 컨테이너 단일 생성
        • prototype : 작업 시마다 Bean을 새롭게 생성하고 싶은 경우
        • request : http 요청마다 새롭게 Bean 생성하고 싶은 경우
  • Bean LifeyCycle callback

    • callback : 어떤 이벤트가 발생하는 경우 호출메소드
    • lifecycle callback : Bean을 생성하고 초기화하고 파괴하는 등 특정 시점에 호출되도록 정의된 함수
    • 주로 사용되는 콜백
      • @PostConstruct : 빈 생성 시점에 필요한 작업 수행
      • @PreDestroy : 빈 파괴 시점에 필요한 작업 수행 (애플리케이션 종료)

결론

이전에는 bean을 xml에 설정값을 써줘야 했지만 요즘에는 어노테이션으로 간편하게 쓸 수 있다.
bean을 생성할때 한번만 생성하고 쭉 쓰느냐, 작업할때마다 쓰느냐, http 요청시마다 따로따로 쓰느냐 같은 규칙을 정할 수 있다.
라이프사이클 콜백을 활용해서 bean이 생성되거나 파괴될때 필요한 작업을 수행시킬 수 있다.

0개의 댓글