Spring Boot/어노테이션

[Spring Boot] @PostConstruct

수수한개발자 2022. 6. 27.
728x90

1. @PostConstruct란?

 

@PostConstruct는 의존성 주입이 이루어진 후 초기화를 수행하는 메서드이다.

@PostConstruct가 붙은 메서드는 클래스가 service(로직을 탈 때? 로 생각 됨)를 수행하기 전에 발생한다. 이 메서드는 다른 리소스에서 호출되지 않는다해도 수행된다. 

 

 

2. 왜 사용하는가(장점)?

 

1) 생성자(일반)가 호출 되었을 때, 빈(bean)은 아직 초기화 되지 않았다. (예를 들어, 주입된 의존성이 없음)

하지만, @PostConstruct를 사용하면, 빈(bean)이 초기화 됨과 동시에 의존성을 확인할 수 있다. 

 

2) bean lifecycle에서 오직 한 번만 수행된다는 것을 보장할 수 있다. 그래서 @PostConstruct를 사용하면 bean이 여러번 초기화되는 것을 방지할 수 있다.

 

나 같은 경우는 페이징을 테스트할때 멤버들을 인서트하기 위해 사용하였다. 페이징을 해야하는데 하나하나 memberRepository.save(new Member())를 해주는것보다 좋은 방법이 있지 않을까 하고 찾게 되었다.

 

@GetMapping("/members")
public  Page<MemberDto> list(@PageableDefault(size = 5, sort = "username") Pageable pageable) {

    return memberRepository.findAll(pageable)
            .map(MemberDto::new);
}

@PostConstruct
public void init() {
    for (int i = 0; i < 100; i++) {
        memberRepository.save(new Member("username" + i, i));
    }

}

위의 코드에서 /members 를 요청할때 나는 member의 정보가 필요했기 때문에 이미 member 엔티티에는 데이터가있어야 될 상황이였어서 의존성주입이 이루어졌을때 @PostConstruct를 사용해 멤버 엔티티에 데이터들을 넣어주었다.

728x90

'Spring Boot > 어노테이션' 카테고리의 다른 글

[Spring Boot] @Builer  (0) 2022.07.06
[Spring Boot] @Transactional  (0) 2022.06.27

댓글