[Spring] 빈 생명주기 콜백: 인터페이스(InitializingBean, DisposableBean), 설정 파일(initMethod, destroyMethod), 어노테이션(@PostConstruct, @PreDestroy)

2023. 6. 14. 14:20· Spring
목차
  1. 💋 빈 생명주기 콜백
  2. ✔ 인터페이스(InitializingBean, DisposableBean)
  3. ✔ 설정 파일에서 초기화, 종료에 대한 메서드를 직접 설정
  4. ✔ 어노테이션(@PostConstruct, @PreDestroy)
반응형

💋 빈 생명주기 콜백

 

스프링에서 빈을 최초에 생성하는 작업을 크게 본다면 '생성'이라고 할 수 있겠지만, 상세히 구분한다면 생성과 초기화 작업으로 나눌 수 있다.

 

생성자를 통해서 내부 값들을 설정하는 가벼운 작업의 경우에 생성자에서 처리하는 것이 좋겠지만, 초기화 작업이 무거워지는 경우도 존재한다. 예를 들면.. 데이터베이스 커넥션 풀 관련해서 애플리케이션 시작 시점에 모든 연결을 하고, 종료 시점에 모든 연결을 종료하는 작업이 있다. 이런 무거운 작업의 경우에는 객체 생성과 초기화에 대한 부분을 완전히 분리하는 것이 좋을 때도 있다. 

 

객체의 초기화와 종료를 위한 별도의 작업이 필요한 경우에 콜백 메서드를 사용할 수 있다.

스프링은 의존 관계 주입이 완료되면, 초기화 콜백 메서드를 통해서 초기화 작업을 수행하고,

스프링 컨테이너가 종료되기 전에 소멸 콜백 메서드를 통해서 종료 작업을 수행한다. 

이 두 가지를 묶어서 빈 생명주기 콜백이라고 부른다. 

 

 

스프링에서 빈 생명주기 콜백을 사용하는 방법은 크게 세 가지로 분류할 수 있다. 

 

  • 인터페이스(InitializingBean, DisposableBean)
  • 설정 파일에서 초기화, 종료에 대한 메서드를 직접 설정
  • 어노테이션(@PostConstruct, @PreDestroy)

 

각 방법에 대해 예시와 함께 설명하겠다!

 

 

 

✔ 인터페이스(InitializingBean, DisposableBean)

 

@Component
public class DataConnectionClient implements InitializingBean, DisposableBean {

    @Override
    public void afterPropertiesSet() throws Exception {
        // 의존관계 주입이 끝난 후에 실행할 코드
        System.out.println("의존관계 주입이 끝난 후에 실행할 코드");
    }

    @Override
    public void destroy() throws Exception {
        // 스프링 컨테이너 소멸 직전에 실행할 코드
        System.out.println("스프링 컨테이너 소멸 직전에 실행할 코드");
    }
}

 

DataConnectionClient 빈이 생성되는 시점에서 afterPropertiesSet()이 실행되고, 애플리케이션이 종료되면서 스프링 컨테이너가 소멸하기 직전에 destroy() 메서드가 실행되는 것을 확인할 수 있다. 

 

 

해당 방법은 단점도 있다. 

 

1. 코드가 스프링 코드에 너무너무 의존적...! 

2. 메서드 이름을 변경할 수가 없음

3. 내가 코드를 고칠 수 없는 외부 라이브러리에 적용할 수 없다. 

 

(초창기에 나온 방법이라 지금은 거의 사용하지 않음)

 

 

✔ 설정 파일에서 초기화, 종료에 대한 메서드를 직접 설정

 

 

    @Configuration
    class LifeCycleConfig {

        @Bean(initMethod = "init", destroyMethod = "close")
        public DataConnectionClient dataConnectionClient() {
            final DataConnectionClient dataConnectionClient = new DataConnectionClient();
            dataConnectionClient.setUrl("http://gitchan.dev");
            return dataConnectionClient;
        }
    }

 

위 코드와 같이 초기화와 소멸 콜백 메서드를 직접 "init", "close"로 지정해줄 수 있다.

 

1. 이름을 직접 지정할 수 있다.

2. 스프링 빈이 스프링 코드에 의존하지 않는다.
3. 설정 정보를 사용하기 때문에 외부 라이브러리를 사용하는 경우에도, 내가 사용할 코드를 수정하면 초기화, 소멸 메서드를 지정할 수 있다. 

 

 

 

✔ 어노테이션(@PostConstruct, @PreDestroy)

 

이 방법이 가장 편하고, 쉽다! (추천함)

 

    @PostConstruct
    public void init() {
        connect();
        call("초기화 연결 메시지");
    }

    @PreDestroy
    public void close() {
        disConnect();
    }

 

빈으로 등록된 객체에서 위와 같이 어노테이션과 함께 콜백 메서드를 작성해주면 된다!

 

1. 스프링에 종속적인 기술이 아니라 JSR-250 라는 자바 표준 어노테이션이기 때문에, 다른 컨테이너에서도 동작한다.

2. 외부 라이브러리에는 적용하지 못한다.

 

외부 라이브러리를 초기화, 종료 해야 하면 @Bean의 기능을 사용해서 2번째 방법을 사용하는 것이 좋다! 

반응형
저작자표시 비영리 변경금지 (새창열림)

'Spring' 카테고리의 다른 글

[Spring/DB] JDBC, SQL Mapper(JdbcTemplate, MyBatis), ORM(JPA - Hybernate): 차이점과 등장 배경, 장단점에 대하여  (2) 2023.06.16
[Spring] 빈 스코프(Scope): 싱글톤, 프로토타입, 웹 관련 스코프  (0) 2023.06.15
[Spring] Repository 계층: Repository VS DAO, 도메인 객체와 entity 객체를 분리해야 하는 이유  (0) 2023.06.06
[Spring] 로컬 8080 포트 종료하기: Web server failed to start. Port 8080 was already in use.Web server failed to start. Port 8080 was already in use.  (0) 2023.05.28
[Spring] Property File (application.properties), @PropertySource: 자바 설정 파일에 프로퍼티 파일(외부 설정) 가져오기  (0) 2023.05.23
  1. 💋 빈 생명주기 콜백
  2. ✔ 인터페이스(InitializingBean, DisposableBean)
  3. ✔ 설정 파일에서 초기화, 종료에 대한 메서드를 직접 설정
  4. ✔ 어노테이션(@PostConstruct, @PreDestroy)
'Spring' 카테고리의 다른 글
  • [Spring/DB] JDBC, SQL Mapper(JdbcTemplate, MyBatis), ORM(JPA - Hybernate): 차이점과 등장 배경, 장단점에 대하여
  • [Spring] 빈 스코프(Scope): 싱글톤, 프로토타입, 웹 관련 스코프
  • [Spring] Repository 계층: Repository VS DAO, 도메인 객체와 entity 객체를 분리해야 하는 이유
  • [Spring] 로컬 8080 포트 종료하기: Web server failed to start. Port 8080 was already in use.Web server failed to start. Port 8080 was already in use.
깃짱
깃짱
연새데학교 컴퓨터과학과 & 우아한테크코스 5기 백엔드 스타라이토 깃짱
반응형
깃짱
깃짱코딩
깃짱
전체
오늘
어제
  • 분류 전체보기
    • About. 깃짱
    • Weekly Momentum
      • 2024
    • PROJECT
      • AIGOYA LABS
      • Stamp Crush
      • Sunny Braille
    • 우아한테크코스5기
    • 회고+후기
    • Computer Science
      • Operating System
      • Computer Architecture
      • Network
      • Data Structure
      • Database
      • Algorithm
      • Automata
      • Data Privacy
      • Graphics
      • ETC
    • WEB
      • HTTP
      • Application
    • C, C++
    • JAVA
    • Spring
      • JPA
      • MVC
    • AI
    • MySQL
    • PostgreSQL
    • DevOps
      • AWS
      • 대규모 시스템 설계
    • frontend
      • HTML+CSS
    • NextJS
    • TEST
    • Industrial Engineering
    • Soft Skill
    • TIL
      • 2023
      • 2024
    • Linux
    • Git
    • IntelliJ
    • ETC
      • 日本語

블로그 메뉴

  • 홈
  • 깃허브

인기 글

최근 글

태그

  • 람다
  • 우테코
  • lamda
  • OOP
  • Composition
  • 조합
  • 상속과조합
  • 스트림
  • 상속
  • 우아한테크코스
  • TDD
  • 레벨로그
  • 함수형프로그래밍
  • Stream
  • 컴포지션
  • Java
  • 우테코5기
  • 예외
  • 우아한테크코스5기
  • 람다와스트림
hELLO · Designed By 정상우.v4.2.0
깃짱
[Spring] 빈 생명주기 콜백: 인터페이스(InitializingBean, DisposableBean), 설정 파일(initMethod, destroyMethod), 어노테이션(@PostConstruct, @PreDestroy)
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.