以编程方式注册的spring bean错过了依赖

时间:2017-05-24 12:16:48

标签: java spring

我想以编程方式注册一个spring bean(org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer)

SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.setQueueNames(queueName);
container.setMessageListener(listenerAdapter);
beanFactory.registerSingleton(name, container);

contains类实现了InitializingBean,其中beanFactory通过

注入
@Autowired
private void setBeanFactory(ConfigurableListableBeanFactory beanFactory) {
    this.beanFactory = beanFactory;
}

问题是,生成的bean无法正常工作。调试显示,例如,没有在实现ApplicationEventPublisherAware的SimpleMessageListenerContainer上设置ApplicationEventPublisher。

反过来,当我通过@Bean注释注册bean时,它可以正常工作:

@Bean
public SimpleMessageListenerContainer zuteilungsProviderContainer(
        @SuppressWarnings("SpringJavaAutowiringInspection") ConnectionFactory connectionFactory,
        MessageListenerAdapter tourZuteilungenListenerAdapter) {
    SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
    container.setConnectionFactory(connectionFactory);
    container.setQueueNames(Q_BRIEFING_WINDOW);
    container.setMessageListener(tourZuteilungenListenerAdapter);
    return container;
}

以编程方式创建bean时,由于某种原因,布线或后处理无法正常工作。我调试了很多,但我迷失了春天的细节。

我想念什么?我会非常感谢任何提示。

1 个答案:

答案 0 :(得分:1)

this._value = val ? [...val] : null;

在行

之前添加此内容
beanFactory.autowireBean(container);
beanFactory.initializeBean(container, name);