使用@PostConstruct@PreDestroy

CommonAnnotationBeanPostProcessor不仅识别@Resource注解,还识别JSR-250生命周期注解:jakarta.annotation.PostConstructjakarta.annotation.PreDestroy。在Spring 2.5中引入的对这些注解的支持,为初始化回调销毁回调中描述的生命周期回调机制提供了一种替代方案。只要CommonAnnotationBeanPostProcessor在Spring ApplicationContext中注册,带有这些注解之一的方法将在生命周期的相同点被调用,就像相应的Spring生命周期接口方法或显式声明的回调方法一样。在下面的示例中,缓存在初始化时预先填充,并在销毁时清除。

  • Java

  • Kotlin

public class CachingMovieLister {

	@PostConstruct
	public void populateMovieCache() {
		// populates the movie cache upon initialization...
	}

	@PreDestroy
	public void clearMovieCache() {
		// clears the movie cache upon destruction...
	}
}
class CachingMovieLister {

	@PostConstruct
	fun populateMovieCache() {
		// populates the movie cache upon initialization...
	}

	@PreDestroy
	fun clearMovieCache() {
		// clears the movie cache upon destruction...
	}
}

有关组合各种生命周期机制的效果的详细信息,请参见组合生命周期机制

@Resource类似,@PostConstruct@PreDestroy注解类型是从JDK 6到8的标准Java库的一部分。但是,整个javax.annotation包在JDK 9中从核心Java模块中分离出来,最终在JDK 11中被移除。从Jakarta EE 9开始,该包现在位于jakarta.annotation中。如果需要,现在需要通过Maven Central获取jakarta.annotation-api工件,只需将其添加到应用程序的类路径中,就像任何其他库一样。