首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在单例bean中制作原型bean?

如何在单例bean中制作原型bean?
EN

Stack Overflow用户
提问于 2017-11-21 19:11:16
回答 1查看 264关注 0票数 0

我需要能够创建新的bean实例-不是像在proxyMode=*中那样在每次调用方法时,而是只有在需要的时候(例如。调用.getObject())。

我知道有ObjectFactoryServiceFactory,但问题是我不能在java配置中定义工厂,但必须在bean中使用硬编码字符串。所以这就是我想要实现的:

代码语言:javascript
复制
@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;
        }
    }
EN

回答 1

Stack Overflow用户

发布于 2017-11-21 20:36:12

您可以尝试使用@Qualifier注释。

Ref - http://zetcode.com/articles/springbootqualifier/

代码语言:javascript
复制
@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()来创建对象。

代码语言:javascript
复制
applicationContext.getBean("rabbitProcessor");
//or
applicationContext.getBean("notThisOne");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47411669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档