我试图在singleton
bean中注入一个prototype
bean,这样对singleton bean方法的每个新调用都有一个原型bean的新实例。
考虑一个单例bean,如下所示:
@Component
public class SingletonBean {
@Autowired
private PrototypeBean prototypeBean;
public void doSomething() {
prototypeBean.setX(1);
prototypeBean.display();
}
}
我希望每次调用doSomething()
方法时,都会使用一个新的PrototypeBean
实例。
下面是原型bean:
@Component
@Scope(value="prototype", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class PrototypeBean {
Integer x;
void setX(Integer x) {
this.x = x;
}
void display() {
System.out.println(x);
}
}
似乎正在发生的是spring在doSomething()
方法中过于急于移交PrototypeBean的一个新实例。也就是说,doSomething()
方法中的两行代码在每一行中创建一个新的prototypeBean实例。
因此在第2行-prototypeBean.display()
打印NULL。
此注入的配置中缺少什么?
来自Spring文档:
您不需要将
与作用域为单例或原型的bean结合使用。如果尝试为单个bean创建作用域代理,则会引发BeanCreationException。
在3.2版本的文档中,您可以找到这句话:
似乎不希望您使用代理的原型bean,因为每次向BeanFactory
请求它时,它都会创建一个新的实例。
为了为原型bean建立一种工厂,您可以使用objectFactory
,如下所示:
@Component
public class SingletonBean {
@Autowired
private ObjectFactory<PrototypeBean> prototypeFactory;
public void doSomething() {
PrototypeBean prototypeBean = prototypeFactory.getObject();
prototypeBean.setX(1);
prototypeBean.display();
}
}
并且您的原型bean将声明如下:
@Component
@Scope(value="prototype")
public class PrototypeBean {
// ...
}
问题内容: 这个问题不是为了讨论是否需要单例设计模式,是否是反模式,还是针对任何宗教战争,而是要讨论如何以最pythonic的方式在Python中最好地实现此模式。在这种情况下,我定义“最pythonic”表示它遵循“最小惊讶原则”。 我有多个将成为单例的类(我的用例用于记录器,但这并不重要)。当我可以简单地继承或修饰时,我不希望增加gumph来使几个类杂乱无章。 最佳方法: 方法1:装饰器 优点
我使用Spring Boot创建了一个服务(微服务设计的一部分)。我有下面的方法, 我多次调用此方法,希望只维护一个实例并在创建后重用它。考虑到并发编程,我可以使用单例模式吗?根据下面的链接,我看到RestTemboard是非常好的方法,而不是Apache Http Client, RestTemplate与ApacheHTTP客户端在spring项目中的生产代码 非常感谢您的建议。
单例 单例,多线程才是单例,在多进程单例无效,大家帮解释?
问题内容: 谁能提供一个单例模式的示例并解释为什么有必要吗? 问题答案: 在走单身路线之前,请重新考虑。您真的需要单身人士吗?如果您需要实现单例的方案,那是因为对它们的需求并没有真正表达出来。您最好不要仅在代码库中引入单例,因为遵循设计模式会很酷。 干净的代码讨论-全局状态和单例 一次还不够 表演者单身人士 但是,真正值得了解的是Dependency Injection 。 现在,如果您真的想用J
问题内容: weka是否要求测试实例具有class属性。我已经使用了一个训练集arff文件来训练分类器。现在,我想测试一个没有class属性的实例(不是从arff文件,必须通过代码创建)并预测该类。我找到了此链接。Weka:如何在Java中获得测试实例的预测值? 但是我的课程属性是字符串“ Y”或“ N”。如果valuateModelOnce()返回double,那是什么意思。是class属性
单例模式确保只创建一个类的实例。我如何在飞镖中建立这个?