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 Factory와 ApplicationContext 두가지 인터페이스가 존재함.
역할
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