java - 在 Spring Boot 中向您不使用的 "own"的 bean 添加后构造钩子(Hook)

标签 java spring spring-boot spring-bean

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

我熟悉 @PostConstruct注释,这与我所追求的非常接近,只是您必须将其添加到类本身定义的方法中。我也熟悉 Spring 生命周期 Hook ,但这还不够好,因为我需要在初始化一个特定 bean 后立即 Hook 到该点。

我所追求的基本上就是 @PostConstruct确实如此,但允许您在运行时从外部向实例添加钩子(Hook)。这样的事情存在吗?

最佳答案

您研究过BeanPostProcessor接口(interface)吗?

基本上,您实现了这个接口(interface),它为您提供了钩子(Hook),其中包括: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,然后以您想要的任何方法(或两者)执行逻辑。

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/

相关文章:

java - 如何静态导入 Java 中单独文件中的枚举?

java - hashmap的负载因子和容量

java - 将解析的属性对象注入(inject)到另一个 Bean

java - 如何根据每个请求使用/不使用缓存?

java - 当我的集合作为 ArrayCollection 发送并在服务器上作为 java.util.Set 接收时,如何保持集合的排序顺序?

java - Spring Boot 无法提取 ResultSet

Java Spring Boot 异常处理

java - 如何在 Spring Boot 中为 Controller 编写单元测试

java - 无法使用 XPath 识别页面上的所有文本元素

java - 使用assertJ方法 containsOnly() 比较自定义对象的数组