如何自动绑定接口?

时间:2019-03-02 14:39:16

标签: spring spring-cloud-stream

基于本期#1623Binder ImplementationSpring 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).

1 个答案:

答案 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());
    }
}
相关问题