当前位置: 首页 > 知识库问答 >
问题:

Quarkus中bean的构造后和发情前方法调用

石思淼
2023-03-14

以下是一个问题的简要概述:

我想在不重启应用程序的情况下调用bean生命周期方法。在Quarkus和CDI/Weld中重新加载bean期间,我需要调用超类的拦截器方法(PostConstruct和PreDestroy)。

例如,我有这样的终点: /reload-它会触发bean reload,在那里我需要遍历所有用我的自定义注释注释和调用注释的bean(如果这样的注释呈现),但是我想保留bean调用顺序(如果Bean扩展了具有这样的生命周期回调的超类,然后我想先调用它)。

我做了些什么来修复它:我使用反射来调用它们。但我认为这是一种肮脏的解决方案,希望有一个更明智的解决方案。有一个使用CDI的解决方案:

beanManager.getInjectionTargetFactory(
            beanManager.createAnnotatedType(instance.getClass())).createInjectionTarget(
            bean).postConstruct(instance)

CDI在beanManager中有getInjessTargetFactory,Quarkus不支持这种方法。它可以工作,但我使用Quarkus方法搜索解决方案。

Quarkus是否有可能在不重新启动应用程序的情况下调用所有bean的postConstruct和preDestroy方法?

共有1个答案

徐丰茂
2023-03-14

您可以在bean上使用常规的CDI注释@PostConstruct@PreDestroy。夸克斯将向他们致敬。

例如:

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.enterprise.context.ApplicationScoped;

@ApplicationScoped
public class MyBean {
    @PostConstruct
    void init() {
        // do something
    }

    @PreDestroy
    void destroy() {
        // do something
    }
}

请注意,它们将在bean初始化和销毁时调用,而不是在应用程序初始化和销毁时调用,因为您可以监听以下特定事件:https://quarkus.io/guides/lifecycle#listening-用于启动和关闭事件

 类似资料:
  • 经过一些实验,这似乎是使用CDI bean时的一个问题,而与我最初假设的PrimeFaces无关。 =============================================================================== 我对JSF和PrimeFaces还很陌生,因此任何指导都将非常感谢。我已经搜索了其他的帖子,并阅读了许多类似的,但没有找到解决方法。 我正试

  • 问题内容: 对不起任何较小的语法错误或其他错误,我正在使用Jitsi模块进行此操作,并且对Java不太熟悉,因此想确认正在发生的事情以及为什么以及如何对其进行修复。 使用按名称加载类方法创建类B的实例时,应用程序正在执行此操作: 在类B中调用重写的load() 初始化变量(根据调试器调用“私有字符串testString = null”),将其无效。 这是预期的Java行为吗?是什么原因造成的?它是

  • 本文向大家介绍在调用子类构造方法之前会先调用父类没有参数的构造方法,其目的是?相关面试题,主要包含被问及在调用子类构造方法之前会先调用父类没有参数的构造方法,其目的是?时的应答技巧和注意事项,需要的朋友参考一下 帮助子类做初始化工作。

  • 简介 这部分我们将回到"回调"这个主题.我们将介绍另外一种写回调函数的方法,即在Twisted中使用 generators. 我们将演示如何使用这种方法并且与使用"纯" Deferreds 进行对比. 最后, 我们将使用这种技术重写诗歌客户端. 但首先我们来回顾一下 generators 的工作原理,以便弄清楚它为何是创建回调的候选方法. 简要回顾生成器 你可能知道, 一个Python生成器是一个

  • 问题内容: 我刚刚开始使用Java进行编程。在讨论方法和构造函数时,我们缺少使用的文字。我不确定到底是什么方法或构造函数以及什么使每个方法唯一。有人可以帮我定义它们并区分两者吗? 问题答案: 构造函数与方法之间的重要区别在于,构造函数初始化使用运算符创建的对象,而方法对已存在的对象执行操作。 构造函数不能直接调用。当关键字创建对象时,将隐式调用它们。可以直接在已使用创建的对象上调用方法。 构造函数

  • 短篇故事:我有一个CDIbean(注释来自而不是来自),称为。我想在创建HTTP会话时实际做一些事情。 因此,我很自然地假设会起作用:当构造这个bean的实例时,只调用一次。但是,根据这里的文档,他们说调用PostConstruct方法: 当托管bean被注入到组件中时,CDI会在所有注入发生后以及在调用所有初始值设定项后调用该方法。 我假设构造后方法将在每个会话中调用一次。然而,实践与文件一致。