1

在 Spring 中,如何声明一个具有原型作用域的 bean?默认情况下,Spring IOC 中的 bean 会在单例范围内自动初始化。

4

2 回答 2

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

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

于 2013-08-05T07:38:28.480 回答
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();
    }
}
于 2018-11-30T22:05:30.540 回答