在 Spring 中,如何声明一个具有原型作用域的 bean?默认情况下,Spring IOC 中的 bean 会在单例范围内自动初始化。
问问题
1245 次
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
registerSingleton
或BeanDefinition'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 回答