일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 성장기록
- GitHub
- 내일배움캠프
- KPT
- 스파르타내일배움캠프
- 스레드
- #스파르타내일배움캠프TIL
- TiL_1st_0419
- Diary 해우소
- #내일배움캠프
- 메서드
- #스파르타내일배움캠프
- Token
- 포맷은 최후의 보루
- static
- 해우소
- 변수의 다양성
- Git
- JVM
- Github_token
- 인스턴스
- 생성자
- 회고록
- Java
- diary
- Java의 이점
- 스파르타내일배움캠프TIL
- 클래스
- 객체지향 언어
- 감사기록
- Today
- Total
몬그로이
Bean의 생명주기와 그것을 알게 되었을 때의 이점 본문
Step 1. 사용되기 위한 준비단계
스프링 컨테이너 생성 → 객체(빈) 생성 → 의존관계 주입(예외: 생성자)
→ 스프링이 초기화 콜백(알림) → 빈 초기화(필요값이 다 들어 있는 상태로 일을 시작할 수 있는 상태)
Step 2. 사용에서 소멸까지의 단계
초기화 상태 → 빈 사용 → 스프링이 소멸 콜백(알림) → 빈 소멸
**선 준비 (Step1) 후 사용 (Step2)
자바에서 사용 준비를 마치고 (데이터 세팅을 마치고)
동작하는 등의 행위는 별도의 초기화 메서드로 분리해놓는 것이 좋음
동작할 때는 외부 커넥션 등을 거치므로 초기화 된 상태에서 시작하는 것이 좋음
물론 단순한 코드의 경우는 예외
**콜백하는 방법 (하단 기술)
인터페이스(InitializingBean, DisposableBean)
설정 정보에 초기화 메서드, 종료 메서드 지원
@PostConstruct, @PreDestroy annotation 지원
이를 통해서 개발자는 어떤 메서드를 어디에 사용할지를 고려한 로직을 짤 수 있게 된다
데이터베이스 연결 설정이나 캐시 초기화 등은 초기화 메서드에 맞춰서 수행하도록 하면 되고
소멸한 후에 맞춰서 빈이 사용하고 남겨진 리소스를 해제하거나 정리할 수 있다
이런식으로 작업을 분리하여 작성하므로 모듈화를 통한 재사용성을 높일 수 있다
콜백하는 방법 1.
인터페이스(InitializingBean, DisposableBean) 사용 - 요즘 잘 안씀
아래의 메서드를 적을 클래스에 implements InitializingBean, DisposableBean 를 붙여준 후 메서드 작성
implements InitializingBean 의 초기화 메서드 : afterPropertiesSet()
@Override
public void afterPropertiesSet() throws Exception {
connect();
call("초기화 연결 메세지");
}
implements DisposableBean 의 종료 메서드: destroy()
@Override
public void destroy() throws Exception {
disconnect();
}
**스프링 전용 인터페이스
스프링 빈이 스프링 코드에 의존(implements)
초기화, 소멸 메서드의 이름을 변경할 수 없음
코드를 수정할 수 없는 외부 라이브러리에 적용 불가
콜백하는 방법 2.
초기화와 소멸시 발동하는 메서드를 미리 만들어 뒀다가
Bean으로 등록한 객체 위에 아래와 같이 설정하면 초기화와 소멸시 해당 메서드들이 발동한다
@Bean(initMethod = "init", destroyMethod = "close")
메서드 이름 자유롭게 설정 가능
스프링 빈이 스프링 코드에 의존하지 않음
코드를 고칠 수 없는 외부 라이브러리에도 적용 가능 (∵설정 정보 사용)
**destroyMethod = "(inferred)" 가 기본 설정값인데 이는 외부 라이브러리에 적용 시 유용함
close, shutdown 의 이름을 가진 메서드들을 자동으로 호출해주기 때문
추론 기능을 사용하고 싶지 않을 때는 "" 로 공백을 주면 됨
콜백하는 방법 3.
시작 메서드와 종료 메서드에 @PostConstruct 와 @PreDestroy 를 달아준다
초기화 메서드
@PostConstruct
public void init() {
System.out.println("NetwrokClient.afterPropertiesSet");
connect();
call("초기화 연결 메세지");
}
종료 메서드
@PreDestroy
public void close() {
System.out.println("NetworkClient.destroy");
disconnect();
}
**최신 스프링에서 가장 권장하는 방법
javax.annotation.PostConstruct 패키지 소속
스프링이 아닌 다른 컨테이너에서도 잘 동작함
컴포넌트 스캔과 잘 어울림
외부 라이브러리에 적용 불가!
'Organizing Docs > Spring Docs' 카테고리의 다른 글
QueryDSL (0) | 2024.06.30 |
---|---|
Entity-Table 에 사용하기 좋은 어노테이션 기능 (0) | 2024.06.30 |
MVC 의 annotation 들 (0) | 2024.05.25 |
HTTP 메서드 (0) | 2024.05.20 |
Spring - SOLID (0) | 2024.05.19 |