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 |
댓글