使用 @PostConstruct@PreDestroy

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

  • Java

  • Kotlin

public class CachingMovieLister {

	@PostConstruct
	public void populateMovieCache() {
		// 在初始化时填充电影缓存...
	}

	@PreDestroy
	public void clearMovieCache() {
		// 在销毁时清除电影缓存...
	}
}
class CachingMovieLister {

	@PostConstruct
	fun populateMovieCache() {
		// 在初始化时填充电影缓存...
	}

	@PreDestroy
	fun clearMovieCache() {
		// 在销毁时清除电影缓存...
	}
}

有关组合各种生命周期机制的影响的详细信息,请参阅 组合生命周期机制

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