@PostConstruct
@PreDestroy
InitializingBean
DisposableBean
@Bean(initMethod=“”, destroyMethod=“”)
BeanNameAware
ApplicationContextAware
<dependency> <groupId>javax.annotation</groupId> <artifactId>javax.annotation-api</artifactId> <version>1.3.2</version> </dependency>
getPhase()
에서 Integer.MAX_VALUE
를 리턴하면 제일 늦게 생성되고, 제일 먼저 파괴 된다. 이 최우선 파괴 시점에 다른 Bean의 파괴 타이밍을 조정해준다.SmartLifeCycle
안에서 다른 Bean 을 destroy 하려면, 그냥 하면 안되고 BeanFactoryAware
인터페이스를 구현하여 DefaultSingletonBeanRegistry
를 주입받은뒤, DefaultSingletonBeanRegistry.destroySingleton(beanName)을 사용해야한다. 그래야 Bean destroy 후에 해당 빈을 ApplicationContext 에서 제거해주어 중복 destroy 를 막아준다.