【发布时间】:2023-01-28 09:26:13
【问题描述】:
我有 2 个接口和 2 个实现,如下所示。
-
KafkaConsumerExecutor(界面) -
DefaultExecutor(1 的实施) -
ConsumerRecordsProcessor(接口) -
LastOnlyRecordsProcessor(3 个例子)
--
public interface KafkaConsumerExecutor {
void start();
void stop();
}
public class DefaultExecutor<MESSAGE_TYPE> implements KafkaConsumerExecutor {
private final ConsumerRecordsProcessor<MESSAGE_TYPE> consumerRecordsProcessor;
@Override
public void start(){}
//processStuff
}
@Override
public void stop(){}
//kill
}
public interface ConsumerRecordsProcessor<MESSAGE_TYPE> {
void process(Iterable<ConsumerRecord<String, MESSAGE_TYPE>> consumerRecords);
}
--
public class LastOnlyRecordsProcessor<MESSAGE_TYPE extends Serializable> implements ConsumerRecordsProcessor<MESSAGE_TYPE> {
public void process(Iterable<ConsumerRecord<String, MESSAGE_TYPE>> consumerRecords){
// process stuff.
}
}
最后,我有一个我称之为启动执行程序的类。
@Inject
public KafkaListenerManagerImpl(ConsumerExecutor consumerExecutor) {
this.consumerExecutor= consumerExecutor;
}
我的问题是,我无法将我的通用实现 DefaultExecutor<String> 绑定到 ConsumerExecutor
我尝试的方法是;
1.
bind(new TypeLiteral<DefaultExecutor<String>>() {}).to(new TypeLiteral<ConsumerExecutor>(){});
bind(LastOnlyRecordsProcessor.class).to(new TypeLiteral<ConsumerRecordsProcessor<Request>>() {});
这个失败了 Caused by: java.lang.IllegalArgumentException: argument type mismatch
2.
bind(DefaultExecutor.class).to(new TypeLiteral<ConsumerExecutor>() {});
bind(LastOnlyRecordsProcessor.class).to(new TypeLiteral<ConsumerRecordsProcessor<String>>() {});
这个看起来更好,但是它找不到透视图,但是我没有处理器的绑定。
UnsatisfiedDependencyException: There was no object available for injection at SystemInjecteeImpl(requiredType=ConsumerRecordsProcessor<MESSAGE_TYPE>,parent=DefaultExecutor,qualifiers={},position=1,optional=false,self=false,unqualified=null,1237264838)
-
bind(DefaultExecutor.class).to(new TypeLiteral<ConsumerExecutor>() {}); bind(new TypeLiteral<LastOnlyRecordsProcessor<String>>() {}).to(new TypeLiteral<ConsumerRecordsProcessor<String>>() {});
还是一样;
Caused by: org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at SystemInjecteeImpl(requiredType=ConsumerRecordsProcessor<MESSAGE_TYPE>,parent=DefaultExecutor,qualifiers={},position=1,optional=false,self=false,unqualified=null,202064342)
简而言之,问题是,
- 我想将 DefaultExecutor 绑定到 ConsumerExecutor。
- LastRecordsOnlyProcessor 到 ConsumerRecordsProcessor
我没有太大的希望,但是你们看到我哪里做错了吗?
提前致谢。
【问题讨论】:
标签: java dependency-injection hk2