使用Guice 3.0,我尝试注入一个提供程序,该提供程序可以抛出特定的已检查异常。所以我使用了抛出提供者扩展。
我为提供者创建了一个接口:
public interface IMyProvider<T> extends CheckedProvider<T>
{
@Override
T get() throws MyException;
}
及其实施:
public class MyProvider implements IMyProvider<List<SomeType>>
{
@Override
public List<SomeType> get() throws MyException
{
//...
}
}
我在要注入提供者的对象上使用@Inject注释:
@Inject
public SomeConstructor(IMyProvider<List<SomeType>> myProvider)
{
//...
}
现在,我的问题是:如何绑定这个提供者?
由于使用了泛型,我想到了使用TypeLiteral:
bind(MyProvider.class);
ThrowingProviderBinder.create(binder())
.bind(IMyProvider.class, new TypeLiteral<List<SomeType>>(){})
.to(MyProvider.class);
但是对于这个bind()方法来说,TypeLiteral
似乎不是有效的参数。
我错过了什么吗?
更新:
我找到了一个解决办法。通过创建扩展ArrayList的类
public class SomeTypeList extends ArrayList<SomeType>
和
bind(MyProvider.class);
ThrowingProviderBinder.create(binder())
.bind(IMyProvider.class, SomeTypeList.class)
.to(MyProvider.class);
但是,如果不需要这个类,那么就更容易了!
您正在寻找一个Type
实例,TypeLitald
不会本机实现该实例。
我没有直接使用它,但Guice确实提供了一个类型类,还有一个方法TypeLiteral。getType。请尝试以下操作之一:
Types.list(某些ype.class)
Types.new参数化类型(List.class,某些ype.class)
(新TypeLitald
我的偏好是第一个,看起来像这样:
ThrowingProviderBinder
.create(binder())
.bind(IMyProvider.class, Types.listOf(SomeType.class))
.to(MyProvider.class);
可以自动绑定泛型类吗?考虑一下: 通用接口: 长子类型: 字符串子类型: 自定义模块:公共类CustomModule扩展AbstractModule{ } 主要的 是否可以以某种方式(例如:基抽象类、反射或其他)自动绑定
我正在开发一个基于JAX-RS的Java应用程序,使用Google Guice进行依赖注入。我的代码中有以下接口: 在上面的接口中,Lock是一个定义如下的接口: 锁接口由以下类实现: LockProvider接口由以下类实现: 除了LockProvider之外,我不希望应用程序中的类知道底层锁项,这就是为什么我没有在lock接口中包含getUnderlyingLockItem。 现在,当我尝试将
我正在尝试用Guice注入泛型类型。我有存储库 所以当我创建光标时
问题内容: 是否有将通用类型参数约束为 任何 类型范围的语法或解决方法? 我知道您可以将一个类型限制为 所有 类型的范围(即逻辑): 是否有逻辑版本,例如: 如果没有支持该语法的语法(我认为不存在),是否有一种好的方法或方法? 在某些情况下,一个示例用例可能是: 人们似乎迷上了上面我的方法示例的确切语义。让我们尝试一下: 编辑: 我不会在编译时知道(可能来自外部代码),所以我想避免每种类型都有具体
我最近开始使用Google Guice,通过我在网络上找到的教程和代码工作,但现在我被困住了。 我已经尝试创建了一个,我可以在每个实体DAO的基础上扩展该。我很难弄清楚如何配置一个现有的私有Guice模块。 这里是我的,其中是一个使用作为标识的实体。类是另一个不依赖于的实体(目前,我正在尝试让它一开始就简单)。 当尝试运行以下内容时,我会得到: Google Guice用户指南在这里没有真正帮助我
问题内容: 我有这个课: 其中,和是具体的类。现在,如果我想为这种情况实现一个模块,我会这样做: 但是我想知道这是否是绑定具体类的正确方法,还是有更简单的方法。我觉得有一个更简单的方法。 编辑 只是尝试了一下,它似乎不起作用: 编辑2 似乎根本不需要绑定: 似乎也可以。 问题答案: Guice的即时绑定正是您想要的。根据您的,并满足以下要求(从Guice 文档中引用): 公共的,无参数的构造函数或