添加一个 post-construct 钩子到你在 Spring Boot 中不 "own" 的 bean

Add a post-construct hook to a bean you don't "own" in Spring Boot

在我的 Spring 引导应用程序中,我想 运行 在 bean 初始化之后但在任何依赖 bean 初始化之前的一些代码。 (在我的特定场景中,我想 运行 一些代码来设置一些 MongoDB 索引,一旦连接池启动,但在任何依赖于池的 bean 启动之前。)

我熟悉 @PostConstruct 注释,除了您必须将它添加到 class 本身定义的方法之外,它与我所追求的非常接近。我也熟悉 Spring 生命周期挂钩,但这也不够好,因为我需要在一个特定的 bean 初始化后立即挂钩到该点。

我所追求的基本上就是 @PostConstruct 所做的,但允许您在 运行 时从外部向实例添加一个挂钩。有这种东西吗?

您查看过 BeanPostProcessor 界面吗?

基本上你实现这个接口,它给你hooks,其中有:postProcessBeforeInitializationpostProcessAfterInitialization。方法签名如下:

@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
    // DO SOMETHING HERE WITH THE BEAN before initialization
    return bean;
}

@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
    //DO SOMETHING HERE WITH THE BEAN after INITIALIZATION
    return bean;
}

因此,简而言之,您对 BeanPostProcessor 的实现将扫描每个 Spring bean,然后以您想要的任何方法(或两者)执行逻辑。

希望此信息对您有所帮助!