사용자 도구

사이트 도구


springframework:bean_lifecycle

Spring Framework Bean Lifecycle

  • @PostConstruct
  • @PreDestroy
  • InitializingBean
  • DisposableBean
  • @Bean(initMethod=“”, destroyMethod=“”)
  • BeanNameAware
  • ApplicationContextAware

@PostConstruct / @PreDestroy 의존성

  • Java 9부터 Java EE 의존성이 deprecated 되고 Java 11 에서 빠졌기 때문에 Java 11 사용시에는 의존성에 명시를 해줘야 한다.
<dependency>
    <groupId>javax.annotation</groupId>
    <artifactId>javax.annotation-api</artifactId>
    <version>1.3.2</version>
</dependency>

SmartLifeCycle

  • getPhase() 에서 Integer.MAX_VALUE를 리턴하면 제일 늦게 생성되고, 제일 먼저 파괴 된다. 이 최우선 파괴 시점에 다른 Bean의 파괴 타이밍을 조정해준다.
  • SmartLifeCycle 안에서 다른 Bean 을 destroy 하려면, 그냥 하면 안되고 BeanFactoryAware 인터페이스를 구현하여 DefaultSingletonBeanRegistry 를 주입받은뒤, DefaultSingletonBeanRegistry.destroySingleton(beanName)을 사용해야한다. 그래야 Bean destroy 후에 해당 빈을 ApplicationContext 에서 제거해주어 중복 destroy 를 막아준다.
  • 입력받는 역할을 하는것(MQ Listener 등)을 먼저 종료시켜줘야 더이상 입력이 없는 상태에서 Gracefull 한 종료가 가능해진다.

참조

springframework/bean_lifecycle.txt · 마지막으로 수정됨: 2022/02/15 13:20 저자 kwon37xi