所以我们可以说我有一个用Spring创建的单例MyWebService。 MyWebService的目标是返回一个MyObject。单线程安全的线程
编辑:当我交出一个非线程安全的Object SomeBuilder并用它创建对象MyObject时,我认为这很危险。但是:如果我交工厂,在每次调用每个方法时都要实例化一个新的SomeBuilder对象,我想我是安全的?
@Webservice
public class MyWebService {
private final SomeFactory someFactory;
private final SomeBuilder someBuilder;
public MyWebService(SomeFactory someFactory, SomeBuilder someBuilder){
this.someFactory=someFactory;
this.someBuilder=someBuilder;
}
public MyObject getSomeObject(SomeArgs someArgs){
//this is threadsafe?
SomeBuilder newlyCreatedBuilder= someFactory.createObjectBuilder();
return newlyCreatedBuilder.getMyObject(someArgs);
//where as this is dangerous?
return someBuilder.getMyObject(someArgs);
}
}
[Singleton Considered Evil](http://c2.com/cgi/wiki?SingletonsAreEvil) – 2012-02-09 13:11:45
@Martin Spamer我认为单例是一个反模式,只要它是用手工实现的单例模式。使用它与依赖注入是一个不同的故事。例如。避免单例中的类的实例字段。并写作webservices不作为singeltons - 如果可能的话,请给我一个提示 – Toskan 2012-02-13 15:00:36
作为一般规则构建对象的要求。如果构建该对象的开销很大,则从资源池中查找它,如果构建起来非常昂贵或需要持久化使用EJB。 – 2012-02-14 18:02:36