在我的 Spring Boot 应用程序中,我想在 bean 初始化之后、任何依赖 bean 初始化之前运行一些代码。 (在我的特定场景中,我想在连接池启动后但在任何依赖于该池的 bean 启动之前运行一些代码来设置一些 MongoDB 索引。)
我熟悉 @PostConstruct
注释,这与我所追求的非常接近,只是您必须将其添加到类本身定义的方法中。我也熟悉 Spring 生命周期 Hook ,但这还不够好,因为我需要在初始化一个特定 bean 后立即 Hook 到该点。
我所追求的基本上就是 @PostConstruct
确实如此,但允许您在运行时从外部向实例添加钩子(Hook)。这样的事情存在吗?
最佳答案
您研究过BeanPostProcessor
接口(interface)吗?
基本上,您实现了这个接口(interface),它为您提供了钩子(Hook),其中包括: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,然后以您想要的任何方法(或两者)执行逻辑。
I especially love this SO topic and its answers (for more info)
希望这些信息有帮助!
关于java - 在 Spring Boot 中向您不使用的 "own"的 bean 添加后构造钩子(Hook),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42227668/