Spring Bean등록, 생성자, 필드값 주입

Coen·2022년 10월 20일
1
post-thumbnail

오늘 업무를 하던 중, 기본이 많이 부족하다는 사실을 깨달았다.

  • Spring Bean을 매일 등록하고 사용하고 있지만 필드값 주입은 생성자 이후에 생긴다는점을 놓치고 있었다.

회사에서는 yml파일이 아닌 profiles파일을 사용중인데, 클래스를 Bean으로 등록하면서 필드의 값을 @Value 어노테이션을 통해 주입받는 형태로 구성했다.

BeanTest.java

@Slf4j
@Component
public class BeanTest {
	
    @Getter
    @Value("${custom.message}")
    String customMessage;
    
    public BeanTest() {
    	log.debug("TestBean.customMessage={}", customMessage);
    }
}

application.yml

custom: 
  message: 야호~

  • 위와 같은 구조로 @Bean을 등록하면서 생성자에서 필드값을 사용하려고 했지만, Null Point Exception이 발생했고, 한참 이유를 찾아보았다...
    역시나 이유는 생성 시점때문이었고, 해결 방법을 찾아보았다.
  1. 빈으로 등록을 하고 빈을 가져와서 작업을 한다.
    • 이렇게 진행을 하는게 제일 먼저 들었던 생각이다. 하지만 많은 빈이 한번에 생성이 되고, 그 많은 빈들이 다 같은 작업을 하게 된다면 또 다시 같은 작업을 해줘야 하기에 불편하다.
  2. 그럼 생성자가 완료된 이후 빈 내부에 있는 메소드를 호출하는 방법
    • 이 방법을 사용하면 반복된 작업을 줄일 수 있다.

BeanTest.java

@Slf4j
@Component
public class BeanTest {
	
    ....
    
    @PostConstruct
    public void init() {
    	log.debug("PostConstruct: TestBean.customMessage={}", customMessage);
    }
}

위의 BeanTest.java에 @PostConstruct 어노테이션을 붙힌 메소드를 추가하면 Bean이 등록된 후 콜백으로 실행이 된다.

오늘 오전시간 대부분을 Bean생성에 보내서 다시한번 기초의 소중함을 느끼게 되었다.

profile
백엔드 프로그래머

0개의 댓글