相当于 quarkus 上的 @Bean(initMethod = "start", destroyMethod = "stop")
equivalent to @Bean(initMethod = "start", destroyMethod = "stop") on quarkus
我想知道 Quarkus 上是否有一些等效的注释
@Bean(initMethod = "start", destroyMethod = "stop")
我正在使用第三方库,它有一个最终的 class,因此我无法扩展它来实现 @PostConstruct 和 @PreDestroy。
Spring 的解决方案非常简单,我只需要用注释上的这两个参数初始化它的 bean;但是,我在 Quarkus 上找不到类似的东西。
CDI 的一个解决方案显然适用于 Quarkus(参见 Quarkus CDI Reference/Supported features),它是使用生产者和处理器。所以,在 class:
@ApplicationScoped // might not be needed - TBD
public class ThirdPartyBeanManager {
@Produces @ApplicationScoped // use the appropriate scope
public ThirdPartyBean getThirdPartyBean() {
ThirdPartyBean thirdPartyBean = new ThirdPartyBean();
// ***HERE IS THE MANUAL @PostConstruct/initMethod CALL***
thirdPartyBean.start();
return thirdPartyBean;
}
// ***THIS IS THE EQUIVALENT OF @PreDestroy/destroyMethod***
public void dispose(@Disposes ThirdPartyBean thirdPartyBean) {
thirdPartyBean.stop();
}
}
可能有一些细节需要解决(例如,“管理器”不必是完整的 CDI bean,我认为它也不需要保留对生成的 bean 的引用),但这是一般概念。
另一个基于此概念的想法是将第三方依赖项包装在您自己的 API 中。您的 API/bean 将在内部使用第三方并将其自己的 @PostConstruct
/@PreDestroy
调用转发给第三方。缺点是代码较多;优点是现在您的应用程序与第 3 方分离,最直接的结果是您现在可以在测试中模拟该依赖关系。
我想知道 Quarkus 上是否有一些等效的注释
@Bean(initMethod = "start", destroyMethod = "stop")
我正在使用第三方库,它有一个最终的 class,因此我无法扩展它来实现 @PostConstruct 和 @PreDestroy。 Spring 的解决方案非常简单,我只需要用注释上的这两个参数初始化它的 bean;但是,我在 Quarkus 上找不到类似的东西。
CDI 的一个解决方案显然适用于 Quarkus(参见 Quarkus CDI Reference/Supported features),它是使用生产者和处理器。所以,在 class:
@ApplicationScoped // might not be needed - TBD
public class ThirdPartyBeanManager {
@Produces @ApplicationScoped // use the appropriate scope
public ThirdPartyBean getThirdPartyBean() {
ThirdPartyBean thirdPartyBean = new ThirdPartyBean();
// ***HERE IS THE MANUAL @PostConstruct/initMethod CALL***
thirdPartyBean.start();
return thirdPartyBean;
}
// ***THIS IS THE EQUIVALENT OF @PreDestroy/destroyMethod***
public void dispose(@Disposes ThirdPartyBean thirdPartyBean) {
thirdPartyBean.stop();
}
}
可能有一些细节需要解决(例如,“管理器”不必是完整的 CDI bean,我认为它也不需要保留对生成的 bean 的引用),但这是一般概念。
另一个基于此概念的想法是将第三方依赖项包装在您自己的 API 中。您的 API/bean 将在内部使用第三方并将其自己的 @PostConstruct
/@PreDestroy
调用转发给第三方。缺点是代码较多;优点是现在您的应用程序与第 3 方分离,最直接的结果是您现在可以在测试中模拟该依赖关系。