添加一个 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,其中有:postProcessBeforeInitialization
和postProcessAfterInitialization
。方法签名如下:
@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,然后以您想要的任何方法(或两者)执行逻辑。
希望此信息对您有所帮助!
在我的 Spring 引导应用程序中,我想 运行 在 bean 初始化之后但在任何依赖 bean 初始化之前的一些代码。 (在我的特定场景中,我想 运行 一些代码来设置一些 MongoDB 索引,一旦连接池启动,但在任何依赖于池的 bean 启动之前。)
我熟悉 @PostConstruct
注释,除了您必须将它添加到 class 本身定义的方法之外,它与我所追求的非常接近。我也熟悉 Spring 生命周期挂钩,但这也不够好,因为我需要在一个特定的 bean 初始化后立即挂钩到该点。
我所追求的基本上就是 @PostConstruct
所做的,但允许您在 运行 时从外部向实例添加一个挂钩。有这种东西吗?
您查看过 BeanPostProcessor
界面吗?
基本上你实现这个接口,它给你hooks,其中有:postProcessBeforeInitialization
和postProcessAfterInitialization
。方法签名如下:
@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,然后以您想要的任何方法(或两者)执行逻辑。
希望此信息对您有所帮助!