CommonAnnotationBeanPostProcessor 不仅可以识别 @Resource注解,还可以识别 JSR-250 生命周期注解:javax.annotation.PostConstructjavax.annotation.PreDestroy。在 Spring 2.5 中引入,对这些注解的支持为 初始化回调销毁回调 中描述的生命周期回调机制提供了一个替代方案。只要在 Spring 应用上下文中注册了 CommonAnnotationBeanPostProcessor(在 xml 中也可以使用 _<_context:annotation-config_/>_元素激活),携带这些注解之一的方法就会在生命周期中与相应的 Spring 生命周期接口方法或明确声明的回调方法在同一时间被调用。在下面的例子中,缓存在初始化时被预先填充,在销毁时被清除。

    1. public class CachingMovieLister {
    2. @PostConstruct
    3. public void populateMovieCache() {
    4. // 在初始化时填充电影缓存...
    5. }
    6. @PreDestroy
    7. public void clearMovieCache() {
    8. // 销毁时清除电影缓存...
    9. }
    10. }

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

    :::tips 与 @Resource 一样,@PostConstruct 和 @PreDestroy 注解类型在 JDK 6 到 8 中是标准 Java 库的一部分。然而,整个 javax.annotation 包在 JDK 9 中从核心 Java 模块中分离出来,并最终在 JDK 11 中删除。如果需要,现在需要通过 Maven 中心获得 javax.annotation-api 工件,只需像其他库一样添加到应用程序的 classpath 中即可。 :::