gpt4 book ai didi

jersey-2.0 - HK2 覆盖另一个 AbstractBinder 绑定(bind)的正确方法是什么

转载 作者:行者123 更新时间:2023-12-03 17:48:14 25 4
gpt4 key购买 nike

我来自 guice 世界,正在寻找一种类似于 Guice 提供的 Modules.override 的方法。我有一个模式,我为我的生产创建一个基本模块/抽象绑定(bind)器,然后在测试中我覆盖需要更改的绑定(bind)。

在理想的世界中,我想简单地扩展父 AbstractBinder,然后实现绑定(bind)以覆盖父绑定(bind)器。或者另一种选择是简单地安装父 Binder,然后覆盖我想要用于测试目的的绑定(bind)。

public class IOCRestModule extends AbstractBinder {

@Override
protected void configure() {
// Max timeout for rest calls is 20 seconds, this will come from properties later on.
bind(20000).to(Integer.class).named("MAX_REST_REQUEST_TIMEOUT");
bind("tcp://localhost").to(String.class).named("jms.url");
}
}

public class IOCMockRestModule extends AbstractBinder {

public static final Logger logger = Logger.getLogger(IOCMockRestModule.class.getName());

@Override
protected void configure() {
install(new IOCRestModule());
bind(200).to(Integer.class).named("MAX_REST_REQUEST_TIMEOUT");
bind("vm://localhost").to(String.class).named("jms.url");

}

这可能吗,是否推荐?我注意到当我这样做时,IOCrestModule 的绑定(bind)没有被 IOCMockRestModule 覆盖。我假设我可以在最后添加安装,这可能会起作用,但不确定这是否会在以后引起任何问题。

最佳答案

在 hk2 中,您可以对同一事物进行多个绑定(bind)。默认情况下,最旧的将优先,但您可以使用排名来更改此设置。所以我认为下面的代码会改变顺序:

@Override
protected void configure() {
install(new IOCRestModule());
bind(200).to(Integer.class).named("MAX_REST_REQUEST_TIMEOUT").ranked(10);
bind("vm://localhost").to(String.class).named("jms.url").ranked(10);
}

这实质上使这个绑定(bind)比来自 IOCrestModule 的绑定(bind)具有更高的等级,然后将首先在注入(inject)点中使用。您应该注意,如果有人查找名称为 MAX_REST_REQUEST_TIMEOUT 的 Integer 列表,他们将获得其中两个

关于jersey-2.0 - HK2 覆盖另一个 AbstractBinder 绑定(bind)的正确方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28417197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com