所以我們可以說我有一個用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