基于本期#1623,Binder Implementation和Spring Cloud Stream Refrence的对话
我想注入Sink对象,并将MessageHandler订阅到输入通道,但是似乎在调用带注释的ApplicationConfig时未正确创建对象。
@Configuration
public class ApplicationConfig {
@Autowired
public void configureInboundEventMessageChannelAdapter(EventBus eventBus,Sink sink) {
System.out.println("sink :" + sink.toString());
System.out.println("sink input :" + sink.input().toString());
System.out.println("Bus :" + eventBus.toString());
InboundEventMessageChannelAdapter inboundEventMessageChannelAdapter = new InboundEventMessageChannelAdapter(eventBus);
sink.input().subscribe(inboundEventMessageChannelAdapter);
}
InboundEventMessageChannelAdapter
是上面代码中的MessageHandler
。
输出:
sink :null
sink input :org.springframework.cloud.stream.messaging.DirectWithAttributesChannel@32940ff0
Bus :org.axonframework.eventhandling.SimpleEventBus@707a6ff6
2019-03-02 16:51:05.915 INFO 21 --- [ main] o.s.c.s.m.DirectWithAttributesChannel : Channel 'unknown.channel.name' has 1 subscriber(s).
答案 0 :(得分:0)
绑定的最佳方法是构造方法。 自动装配注释有时会将Object实例化为null。 借助构造函数Dependency Injection,可以使属性定型,因此总是有一个值。
public SomeClass class {
private final Source source;
@Autowired
public SomeClass (Source source){
this.source = source;
}
public void sayHello(String name){
source
.output()
.send(MessageBuilder.withPayload(name).build());
}
}