我需要能够创建新的bean实例-不是像在proxyMode=*中那样在每次调用方法时,而是只有在需要的时候(例如。调用.getObject())。
我知道有ObjectFactory和ServiceFactory,但问题是我不能在java配置中定义工厂,但必须在bean中使用硬编码字符串。所以这就是我想要实现的:
@Configuration
class Config {
@Bean
public MessageListenerContainerFactory listenerContainerFactory() {
MessageListenerContainerFactory listenerContainerFactory = new MessageListenerContainerFactory();
listenerContainerFactory.setMessageListener(rabbitProcessor());
return listenerContainerFactory;
}
@Bean
@Scope(SCOPE_PROTOTYPE)
public MessageListener rabbitProcessor() {
return new RabbitProcessor();
}
@Bean
@Scope(SCOPE_PROTOTYPE)
public MessageListener notThisOne() {
return new NotThisOne();
}
}
class MessageListenerContainerFactory {
private MessageListener messageListener;
public void setMessageListener(MessageListener messageListener) {
this.messageListener = messageListener;
}
public SimpleMessageListenerContainer createListenerContainer(){
SimpleMessageListenerContainer setMessageListener= new SimpleMessageListenerContainer();
//THIS HERE IS NEEDED!!!
Object needed = SPRINGCONTEXT.GETBEANNAMEOF(this.messageListener).getObject();
listenerContainer.setMessageListener(needed);
return setMessageListener;
}
}发布于 2017-11-21 20:36:12
您可以尝试使用@Qualifier注释。
Ref - http://zetcode.com/articles/springbootqualifier/
@Bean
@Qualifier("rabbitProcessor")
@Scope(SCOPE_PROTOTYPE)
public MessageListener rabbitProcessor() {
return new RabbitProcessor();
}
@Bean
@Qualifier("notThisOne")
@Scope(SCOPE_PROTOTYPE)
public MessageListener notThisOne() {
return new NotThisOne();
}然后,无论何时需要,都可以通过调用applicationContext上的getBean()来创建对象。
applicationContext.getBean("rabbitProcessor");
//or
applicationContext.getBean("notThisOne");https://stackoverflow.com/questions/47411669
复制相似问题