Как связать интерфейсы Autowire? - PullRequest
0 голосов
/ 02 марта 2019

На основе разговоров в этом выпуске # 1623 , Реализация связывателя и Ссылка Spring Cloud Stream Refrence

Я хочу добавить объект Sinkи подписать MessageHandler на входной канал, но кажется, что объект был создан неправильно при вызове Annotated 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 голосов
/ 02 марта 2019

Лучший способ привязки - это конструктор.В некоторых случаях аннотация с автопроводкой создает экземпляр объекта как 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());
    }
}
...