레퍼런스 Bean 생명주기 관리

황제낙엽 2007.03.23 03:57 조회 수 : 1019 추천:100

Spring Bean의 생명주기를 이해하는 것이 중요한 이유는, Spring이 Bean의 생성방법을 커스터마이징 할 수 있는 기회를 제공하기 때문이다.


 

1) BeanFactory / ApplicationContext
Spring 프레임워크는 Bean 설정 파일에 정의되어 있는 설정 정보를 초기화하고 초기화된 빈에 접근하기 위한 목적으로 BeanFactory 와 ApplicationContext 인터페이스를 가지고 있다. Bean 설정파일에 정의되어 있는 정보를 바탕으로 기본적인 Bean의 생성, 초기화, 접근성과 같은 기능을 제공하는 인터페이스는 BeanFactory이다.
ApplicationContext는 BeanFactory의 하위 인터페이스로서 BeanFactory가 가지고 있는 기능 외에 추가적인 기능을 지원한다.
ApplicationContext 추가적으로 지원하는 기능으로는,

① MessageSource를 지원하여 어플리케이션에서 필요한 메시지들을 관리.
② Spring 프레임워크에서 관리하는 POJO Bean들 중 ApplicationListener를 구현하여 설정 파일에 등록할 경우 등록된 리스너에게 이벤트를 전달하는 것이 가능하다.
즉, ApplicationContext를 이용할 경우 어플리케이션 내에 간단한 이벤트 기능을 구현하는 것이 가능하다.
③ 어플리케이션 내에서 파일, URL과 같은 다양한 자원에 접근할 수 있다.
ResourceLoader를 지원하므로 다양한 하위레벨의 자원을 Spring 프레임워크와 Resource 인스턴스로 생성하는 것이 가능하다. ApplicationContext가 제공하는 추가적인 기능 때문에, 대부분의 어플리케이션에서는 BeanFactory보다 선호하는 경향이 강하다. BeanFactory의 사용을 고려해볼 만한 유일한 경우는 이동통신기기와 같이 자원이 한정적인 상황일 때 이다. 또한, BeanFactory는 모든 Bean을 늦게 로딩(lazy loading)하며 ApplicationContext는 미리 로딩(preloading)한다.
미리 로딩한다는 것은 해당 Bean이 필요할 때 즉시 사용될 수 있도록 보장해주며 Bean이 생성되기를 기다릴 필요가 없다는 의미이다.

2) ApplicationContext 대표 구현 class
① ClassPathXmlApplicationContext
class 경로에 있는 XML 파일로부터 컨텍스트 정의를 로딩하며, 컨텍스트 정의를 클래스 경로에 있는 자원으로 취급한다.
② FileSystemXmlApplicationContext
파일 시스템에 있는 XML 파일로부터 컨텍스트 정의를 로딩한다.
③ XmlWebApplicationContext
웹 어플리케이션에 포함되있는 XML 파일로부터 컨텍스트 정의를 로딩한다

3) 생성자와 세터 비교
① 생성자 주입 장점
- 생성자 주입은 강한 의존성 계약을 강제한다.
- Bean의 모든 의존성이 생성자를 통해 설정되기 때문에, 불필요한 세터 메소드를
가질 필요가 없다.
- 오직 생성자를 통해서만 특성을 설정할 수 있도록 함으로써, 자연히 그 특성은 변경
되지 않는 특성이 되는 효과가 있다.
② 세터 주입 장점
- Bean이 여러개의 의존성을 갖는 경우에는 생성자의 파라미터 목록이 매우 길어진다.
- 유효한 객체를 구성하는 다양한 방법이 존재한다면, 오직 파라미터의 수와 타입에 의해 생성자의 시그너처가 다양해질 것이므로 특정한 생성자를 식별하기가 어려워진다.
- 생성자가 동일한 타입의 두 개 이상의 파라미터를 취급한다면, 각 파라미터의 목적을 파악하기 어려워질 것이다.
- 생성자 주입은 그 자체로 즉시 상속에 사용할 수 없다. 부모 객체의 private 특성을 설정하기 위해서는 Bean의 생성자에서 항상 파라미터를 super()로 넘겨야 한다.

번호 제목 글쓴이 날짜 조회 수
공지 [작성중/인프런] 스프링부트 시큐리티 & JWT 강의 황제낙엽 2023.12.20 5083
84 @ConfigurationProperties 사용하기 황제낙엽 2025.10.23 1617
83 Spring Boot 에서 서버 로직의 역할별 애노테이션 구분 황제낙엽 2025.10.13 1411
82 (확인전) [2021.03.12] Eclipse에서 Spring Boot로 JSP사용하기(Gradle) file 황제낙엽 2023.12.23 2817
81 Spring Boot PetClinic Sample Application 황제낙엽 2023.12.21 2575
80 Eclipse, Spring Boot, Gradle, SVN 레거시(2019) 시스템 유지보수 환경 구축 file 황제낙엽 2023.11.14 1732
79 [시리즈 강좌] 스프링부트로 웹서비스 구축하기 황제낙엽 2023.07.13 1691
78 Spring Boot에서의 RESTful API 모듈 file 황제낙엽 2020.04.16 1896
77 [POST] Spring MVC 구조 분석 황제낙엽 2024.01.17 2053
76 Spring Framework 에서 사용하는 annotation 황제낙엽 2024.01.17 2093
75 Spring MVC configuration file 황제낙엽 2024.01.17 2041
74 [스프링 시큐리티 OAuth2] 강의 자료와 학습용 소스 file 황제낙엽 2024.01.15 1595
73 OAuth 2.0 Resource Server - Spring Security OAuth2.0 황제낙엽 2023.12.27 2016
72 Spring, JSP, Gradle, Eclipse 환경 구축[2] - 샘플 프로젝트 file 황제낙엽 2023.12.24 1922
71 Spring, JSP, Gradle, Eclipse 환경 구축[1] - 레퍼런스 조사 황제낙엽 2023.12.23 2056
70 spring-security-samples 황제낙엽 2023.12.22 1800
69 [Bard] Spring 과 Spring Boot의 차이 file 황제낙엽 2023.12.21 1803
68 Spring 과 Spring Boot의 차이 file 황제낙엽 2020.05.26 2308
67 Spring Security OAuth2.0 파헤치기 황제낙엽 2019.09.05 2079
66 Spring Security OAuth2구현 file 황제낙엽 2019.09.05 2208
65 Spring Security OAuth 황제낙엽 2019.09.05 2442