IJY
느리더라도 꾸준히
IJY
전체 방문자
오늘
어제
  • 분류 전체보기 (67)
    • Develop (67)
      • Java (8)
      • Go (0)
      • Test (1)
      • Web (1)
      • HTML, CSS (1)
      • TIL(Today I Learned) (18)
      • SQL (0)
      • Algorithm (27)
      • 회고 (7)
      • Troubleshooting (1)
      • Etc (3)
    • Etc (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기

공지사항

인기 글

태그

  • 회고
  • PostConstruct
  • BufferedReader
  • 우테코 온보딩
  • Filter
  • API 예외 처리
  • java
  • recursion
  • html
  • object
  • 독후감
  • 초기화
  • 12921
  • web
  • BufferedWriter
  • 백준
  • REST Assured
  • Interceptor
  • 재귀
  • MVC
  • init
  • sort
  • Class
  • 소수 찾기
  • instance
  • Spring
  • EntityTransaction
  • stream
  • 프로그래머스
  • 알고리즘

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
IJY
Develop/Java

Spring 기동시 bean 초기화 메서드 호출 방법

Develop/Java

Spring 기동시 bean 초기화 메서드 호출 방법

2022. 11. 29. 21:09

구현을 하다보면 몇몇 bean에서 Spring 기동시 초기화가 되어야 하는 경우가 있는데 이에 대한 내용을 공유하고자 합니다.

 

  1. 생성자에서 초기화 메서드 호출
  2. @PostConstruct annotation 사용

생성자에서 초기화 메서드 호출

@Component
public class beanClass {
    public beanClass() {
    	init();
    }
    
    private init() {
    	// init logic
    }
}

위 예제 코드와 같이 생성자에 초기화 메서드를 호출하도록 하여 bean을 생성할 때 초기화 로직이 동작하도록 하는 방법이 있으나, 이는 DI를 이용하여 추가한 객체에 대한 로직이 init() 메서드에 포함이 되어있다면 에러가 발생하게 된다.

@Component
public class BeanClass {
    @Autowired
    private DiClass diClass;

    public BeanClass() {
    	init();
    }
    
    private init() {
    	// init logic
        diClass.setLogic(...); // DI로 입력 받는 클래스에 set으로 초기화를 하는 로직
    }
}

바로 위와 같은 상황에서 에러가 발생하게 되는데, 이유는 생성되는 시점(생성자 호출 시점)에서는 아직 DI가 진행되지 않았기 때문에 해당 객체 참조시 null로 나오게 되기 때문이다.

따라서 위와 같은 상황에서는 아래와 같이 @PostConstruct annotation을 사용한 방법으로 해결할 수 있다.

 

@PostConstruct annotation 사용

@Component
public class BeanClass {
    @Autowired
    private DiClass diClass;
    
    @PostConstruct
    private init() {
    	// init logic
        diClass.setLogic(...); // DI로 입력 받는 클래스에 set으로 초기화를 하는 로직
    }
}

생성자에서 init() 메서드를 호출하는게 아니라 init() 메서드에 @PostConstruct 어노테이션을 사용하여 초기화를 하는 방법

@PostConstruct 어노테이션을 추가한 메서드는 해당 bean이 생성된 이후에 1회 호출하게 된다.

따라서 이미 해당 bean이 생성되어 초기화가 끝났기 때문에 DI도 끝난 상태이며, 그로인해 DI된 객체를 참조하여 초기화 작업을 수행하더라도 에러가 발생하지 않게된다. => 정상적으로 초기화 성공

 

이 2가지 방법 외에도 몇가지 방법이 더 있는 것 같지만.. 일단 직접 사용한 방법은 위 2가지 방법이므로 해당 글은 여기서 마무리 합니다.

'Develop > Java' 카테고리의 다른 글

Spring MVC 간단 정리  (0) 2023.02.14
Java - File read 2가지 방법  (0) 2022.11.29
JPA Fetch Type  (1) 2022.09.09
Collection framwork  (0) 2022.07.26
제네릭(Generic)이란?  (0) 2022.07.25
  • 생성자에서 초기화 메서드 호출
  • @PostConstruct annotation 사용
'Develop/Java' 카테고리의 다른 글
  • Spring MVC 간단 정리
  • Java - File read 2가지 방법
  • JPA Fetch Type
  • Collection framwork
IJY
IJY
개발 관련 공부한 내용을 정리하는 블로그입니다. 느리더라도 꾸준히 포스팅을 하려고 노력합니다.

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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