티스토리 뷰
빈의 라이프 사이클
스프링 컨테이너는 객체를 생성하고 주입한 다음 초기화하고 소멸하는 것을 관리합니다. 스프링 컨테이너를 초기화 하는 과정에서는 객체를 생성하고 의존 관계를 설정합니다. 이 과정에서 자동 주입을 설정했던 것 또한 완료가 됩니다. 이후 구현한 초기화 메서드가 있다면 빈 객체의 초기화를 진행합니다. 컨테이너를 소멸하게 되면 빈 객체에 소멸 메서드가 구현이 되었다면 소멸 메서드를 실행한 후 컨테이너가 소멸됩니다.
초기화&소멸 인터페이스
이 두 과정이 필요하다면 아래의 인터페이스를 구현하면 됩니다.
public interface InitializaingBean{
void afterPropertiesSet() throws Exception;
}
public interface DisposableBean{
void destroy() throws Exception;
}
아래는 인터페이스를 구현한 예시입니다.
package spring;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
public class Client implements InitializingBean, DisposableBean{
@Override
public void destroy() throws Exception {
System.out.println("Client destory 실행");
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("Client initializing 실행");
}
public void send() {
System.out.println("메세지 전송");
}
}
싱글톤 vs 프로토타입
컨테이너는 기본적으로 한 식별자에 하나의 빈 객체를 만드는 싱글톤 범위를 따릅니다.
...
Client client1 = ctx.getBean(Client.class);
Client client2 = ctx.getBean(Client.class);
//client1와 client2는 같은 객체를 가리킨다.
...
사용 빈도가 낮긴 하지만 빈 객체를 생성할 때, @Scope 어노테이션을 통해 prototype 속성을 주면 getBean을 통해 빈 객체를 가져올 때마다 객체를 새로이 생성하게 됩니다.
package Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import spring.*;
@Component
public class AppCtx {
@Bean
@Scope("prototype")
public Client client() {
return new Client();
}
}
...
Client client1 = ctx.getBean(Client.class);
Client client2 = ctx.getBean(Client.class);
//client1와 client2는 다른 객체를 가리킨다.
...
프로토타입 범위의 객체를 사용할 때 유의해야할 점은 컨테이너가 종료될 때, 빈 객체를 자동으로 소멸해주지 않는다는 점입니다. 객체 소멸 코드를 직접 작성해주도록 합시다.
'Books > 스프링5 프로그래밍 입문' 카테고리의 다른 글
[Spring] AOP (1) (0) | 2021.03.13 |
---|---|
[Spring] Proxy 객체 (0) | 2021.03.12 |
[Spring] 컴포넌트 스캔 (0) | 2021.03.09 |
[Spring] Autowired 어노테이션 (0) | 2021.03.08 |
[Spring] Container의 사용 (0) | 2021.03.07 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Suffix Array
- knapsack
- sweeping
- 펜윅트리
- 2-SAT
- dijkstra
- hld
- DP
- bfs
- 스위핑
- 정렬
- greedy
- 이분매칭
- spring
- spring boot
- 좌표압축
- Segment tree
- 트라이
- 동적계획법
- Fenwick
- kmp
- implementation
- 이분탐색
- Oracle
- SCC
- dfs
- sorting
- 세그먼트트리
- string
- union find
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함