gpt4 book ai didi

java - Guice:将接口(interface)绑定(bind)到动态代理创建的实例

转载 作者:太空宇宙 更新时间:2023-11-04 06:43:01 24 4
gpt4 key购买 nike

我正在寻找一种解决方案,将标记接口(interface)的任何子接口(interface)绑定(bind)到由java动态代理创建的实例。动态代理知道如何实现子接口(interface)中的每个方法。问题是我想为所有请求的子接口(interface)自动执行此操作。

interface ITaggingInterface() {
}

interface ISubInterface extends ITaggingInterface {
String doSomething();
}

ISubInterface可以通过使用代理来实现:

ISubInterface si = (ISubInterface)Proxy.newProxyInstance(classloader, new Class<?>[]{ISubInterface.class}, invocationHandler);

如何检测我的注入(inject)器,以便每次请求子接口(interface)时它都使用动态代理来创建实现。

我知道我可以单独绑定(bind)每个子接口(interface),但这是我想避免的。我正在寻找类似的东西:

bind(any-sub-interface).toProvider(provider-that-creates-proxy-instance);

这可以通过 guice 实现吗?

最佳答案

我认为这不可能以您正在寻找的无缝方式实现。从本质上讲,Guice 的绑定(bind)就像一个 Map<Key, Provider> 。这使得绑定(bind)“具有此注释的任何类型”、“此类型的任何子类型”或其他类似匹配器的绑定(bind)变得困难。

如果您同意使用方法/字段注入(inject)和自定义注释而不是 @Inject,您可以尝试使用 custom injection ,这将允许您检查注入(inject)的类并根据需要操作它们,就像上面的链接使用 @InjectLogger 所做的那样。

除了重组您的需求之外,我个人的解决方案是这样的:

/** Injectable. */
class TaggingInterfaceFactory {
/** Guice can always inject the injector. */
@Inject Injector injector;

<T> T getInstanceOrProxy(Class<T> clazz) {
if (clazz.isAssignableFrom(ITaggingInterface.class)) {
return createYourProxyHere(clazz);
} else {
return injector.getInstance(clazz);
}
}
}

关于java - Guice:将接口(interface)绑定(bind)到动态代理创建的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24418442/

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