• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

@PostConstruct와 @Transactional 분리

20.03.08 02:22 작성 조회수 950

7

@PostConstruct와 @Transactional 분리해야 하는이유를 간단히 짚고넘어가셔서 그런데 좀더 자세하게 설명해주실 수 있으신가요 ?? ㅠㅠ

답변 1

답변을 작성해보세요.

7

안녕하세요. 윤성님

@PostConstruct는 해당 빈 자체만 생성되었다고 가정하고 호출됩니다. 해당 빈에 관련된 AOP등을 포함한, 전체 스프링 애플리케이션 컨텍스트가 초기화 된 것을 의미하지는 않습니다.

트랜잭션을 처리하는 AOP등은 스프링의 후 처리기(post processer)가 완전히 동작을 끝내서, 스프링 애플리케이션 컨텍스트의 초기화가 완료되어야 적용됩니다.

정리하면 @PostConstruct는 해당빈의 AOP 적용을 보장하지 않습니다.

이런 것을 우회하는 여러가지 방법이있는데요. 제가 보여드린 방법(다른 스프링 빈을 호출해서 사용하는 방법)을 포함해서, AOP를 사용하지 않고 트랜잭션을 직접 코딩하는 방법, 애플리케이션 컨텍스트가 완전히 초기화 된 이벤트를 받아서 호출하는 방법 등이 있습니다.

관련해서 다음 링크를 참고해보시면 더욱 자세한 도움을 받을 수 있습니다^^

https://stackoverflow.com/questions/17346679/transactional-on-postconstruct-method