指导如何使属性动态化?

问题描述 投票:0回答:0

我有这个接口类:

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 使每个表的表属性动态化。我该怎么做?

java dependency-injection java-8 guice guice-3
© www.soinside.com 2019 - 2024. All rights reserved.