我正在尝试在Guice进行辅助注射。
这是我的实现。
public interface Dao<T> {
T get(String id);
}
public class DaoImpl<T> implements Dao<T> {
private final Class<T> clazz;
DaoImpl(@Assisted final Class<T> clazz) {
this.clazz = clazz;
}
@Override
public T get() {
//Some impl code
return T;
}
}
工厂界面。
public interface DaoFactory {
<T> Dao<T> getDao(Class<T> clazz);
}
吉思模块:
public class DaoModule extends AbstractModule {
@Override
protected void configure() {
install(new FactoryModuleBuilder()
.implement(new TypeLiteral<Dao<? extends Entity>>() {},
new TypeLiteral<DaoImpl<? extends Entity>>() {})
.build(DaoFactory.class));
}
}
我得到错误:“DaoFactory不能用作键;这一点没有充分说明”。
我应该如何配置FactoryModuleBuilder?
我的目标是在运行时使用DaoFactory获取Dao的类型化实例
辅助注入期望有一个绑定来选择你想要返回给你的东西——你的工厂接口的参数必须只是所需实现的构造函数中的@辅助
注释参数。
在这种情况下,这意味着为了让DaoFactory.getDao
取一个T
,那么DaoImpl。
public class DaoImpl<T> implements Dao<T> {
public DaoImpl(@Assisted T instance) {
// Do something with the instance so this Dao is wired up right.
// perhaps with instanceof or instance.getClass()?
}
@Override
public T get() {
//Some impl code
return T;
}
}
这就是辅助注入知道如何做的所有事情 - 可以以某种方式创建运行时查找并不是魔法,但这对您来说可能已经足够了,具体取决于您的用例。我不确定为什么
DaoFactory.getDao
会采用 T 的实例,然后 Dao.get()
也会返回一个 T
,但由于这是问题中示例代码的一部分,我猜你已经计划好了。
编辑后更新:
DaoFactory.get道
接受一个T
实例,但Dao Impl
的构造函数是Dao Impl(@辅助最终类
public interface DaoFactory {
<T> Dao<T> getDao(Class<T> obj);
}
现在你用
MyEntity.class
之类的东西作为参数调用getDao
,会得到一个道
实际上返回了一个< code >类如果您希望它特定于某个对象,那么调用< code>instance.getClass()
并将其传入将会产生一些您应该理解的泛型效果,因为< code>getClass()
class MyClass {}
class MySubclass extends MyClass{}
MyClass foo = new MySubclass();
factory.getDao(foo.getClass());// the generics will be a Dao<? extends MyClass>,
// not a Dao<MySubclass>, even though the DaoImpl.clazz holds an instance
// of MySubclass
我正在使用Guice Assisted Inject库为我建立一个工厂。我目前的设置如下: 这迫使我使用< code > factory . create controller(first,factory . create second(first))显式创建一个< code>SecondDep。是否可以更改我的绑定,这样我就可以简单地执行< code > factory . create con
我已经使用google-guice和辅助注射机制有一段时间了。因为我在scala,刚刚发现scala-guice,我也对使用它感兴趣。但是我对如何使用辅助注射感到困惑。没有使用辅助注射的例子。 因此,我的问题是:是否可以使用scala guice辅助注射,如果可以,请提供一个简单的例子? 此外,对于google-guice,我使用以下库:javax.inject.jar、guice-3.0.jar
我有一个工厂是这样的: 这样的类: 如何正确使用Google Guice来做同样的事情?我尝试了辅助注射,但我不确定如何创建“UrlBuilder”。谁能帮忙?
问题内容: 我正在尝试使用Guice注入通用类型。我的Repository 位于Cursor类中。 因此,当我创建Cursor 时,我还希望Guice将我的存储库注入Repository 。有没有办法做到这一点? 问题答案: 您必须使用: 要获取的实例,则需要: 在FAQ中有更多细节。
我一直在用guice做一个项目。 我有一个抽象类,它有很多实现。为了使用正确的实现,我使用一个工厂,它接收参数,然后返回正确的实例。 演示代码 我想知道的是,如果我可以用替换工厂,直接注入的实现(请注意,它们应该使用辅助注入)? 谢谢你。
目前,我将辅助注射与命名参数一起使用,如下所示: 这很棒。但是我认为使用字符串作为参数的标识符有点难看。我想做的是以下内容: 所以本质上我想要自定义辅助注释。有办法做到这一点吗?