我有这个接口类:
public interface Query {
String getQuery();
}
Query Builder 实现 Query
public class QueryBuilder implements Query {
private String query;
private final String table;
@Inject
public QueryBuilder(@Named("Table") String table) {
this.table = table;
}
public Query insert() {
query = "INSERT ";
return this;
}
@Override
public String getQuery() {
return query;
}
}
Table 是一个抽象类,用作泛型类
public class Table {
protected Query query;
@Inject
public Table(@Named("Table") Query query) {
this.query = query;
}
}
UserTable 扩展 Table 就像其他一些表一样。
public class UserTable extends Table {
private Query query;
@Inject
public UserTable(@Named("UserTable") Query query) {
super(query);
}
public String insert() {
return query.insert().query();
}
}
这是查询模块
public class QueryModule extends AbstractModule {
@Override
protected void configure() {
bind(Query.class).annotatedWith(Names.named("UserTable")).to(QueryBuilder.class);
}
@Provides
@Named("UserTable")
public String provideUserTable() {
return "users";
}
}
在这里,我在主类中测试我的代码。
public static void main(String[] args) {
Injector injector = Guice.createInjector(new QueryModule());
Table table = injector.getInstance(UserTable.class);
System.out.println("Insert statement: " + table.insert());
}
我遇到了这个讨厌的错误
Caused by: com.google.inject.CreationException: Unable to create injector, see the following errors:
Caused by: com.google.inject.CreationException: Unable to create injector, see the following errors:
1) [Guice/MissingImplementation]: No implementation for String annotated with @Named(value=Table) was bound.
Did you mean?
* String annotated with @Named(value=Table1Query)
我想使用 Guice Java 使每个表的表属性动态化。我该怎么做?