Spring IoC / Bean

Inversion of Control

"제어권이 역전이 되었다." == "제어권을 개발자가 아닌 프레임워크가 쥐고있다."라는 말이다.

  • 개발자는 객체 생성, 코드 흐름에 관련된 코드를 직접 작성하지 않음.

  • 프레임워크가 제공하는 방법을 통해 단순히 설정만 하는 것

  • 프레임워크는 설정을 통해 객체를 생성하고 코드 동작 순서를 결정하여 실행

Spring IoC Container

Spring Bean을 관리하는 Spring IoC Conatiner.

instantiating, configuring, and assembling the beans by reading configuration metadata

Spring Bean

  • name, type, object로 구성

  • Java Bean이랑 다르다!

Spring IoC Container는 Bean FactoryApplicationContext 두가지 인터페이스가 존재함.

역할

  • Spring Bean 생성

  • Spring Bean 삭제

  • Spring Bean 의존관계 주입

Bean Scope

Spring Bean 객체도 Java 객체로 생명주기 설정이 가능함.

  • singleton (deafult): 스프링 컨테이너 생성과 종료까지 유지

  • prototype: 의존관계 주입까지만 관여

  • web 관련 scope

    • request: HTTP Request

    • session: HTTP Session

    • application: ServletContext

    • websocket: WebSocket

Bean 생성과 소멸 관리

1. InitializingBean, DisposableBean

해당 인터페이스를 통해 빈의 라이프 사이클을 관리할 수 있음.

  • InitializingBean: afterPropertiesSet() 메서드

  • DisposableBean: destroy() 메서드

But, Spring 전용 인터페이스로 스프링에 종속적이며 초기화/소멸 메서드의 이름을 변경할 수 없다. 또한 캐시 등 직접 제어해주어야 하는 외부 라이브러리에도 적용할 수 없다.

2. PreDestory, PostContruct

위와 같은 이유로 스프링에서는 @PreDestory , @PostContruct 어노테이션 사용을 권장함.

해당 어노테이션은 javax 어노테이션으로 스프링이 아닌 다른 컨테이너에서도 동작이 가능하다. 하지만 외부 라이브러리를 Bean으로 등록하는 경우라면 코드 수정이 불가능하여 다른 방법을 사용해야 한다.

Last updated