在Spring中,如何使用原型范围声明bean?

时间:2013-08-05 07:37:20

标签: spring

在Spring中,如何使用原型范围声明bean?默认情况下,Spring IOC中的bean会自动使用单例范围进行初始化。

2 个答案:

答案 0 :(得分:6)

<bean id="your id" class="your class" scope="prototype" />

或标记@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)您正在使用注释

答案 1 :(得分:0)

除了@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE),我们还可以简单地写@Scope("prototype")。还有几种方法可以通过编程方式创建Bean并设置其范围。例如:SingletonBeanRegistry's registerSingletonBeanDefinition's setScope

这是一个简单的示例,我们注册一个自定义bean并使用setScope设置其范围:

package com.zetcode;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;

@ComponentScan(basePackages = "com.zetcode")
public class Application {

    private static final Logger logger = LoggerFactory.getLogger(Application.class);

    public static void main(String[] args) {

        var ctx = new AnnotationConfigApplicationContext(Application.class);

        var beanFactory = (BeanDefinitionRegistry) ctx.getBeanFactory();

        beanFactory.registerBeanDefinition("myBean",
                BeanDefinitionBuilder.genericBeanDefinition(String.class)
                        .addConstructorArgValue("This is my bean")
                        .setScope("prototype")
                        .getBeanDefinition()
        );

        logger.info("{}", ctx.getBean("myBean"));

        ctx.close();
    }
}