2015-06-22 38 views
1

布洛赫寫了下面關於創建對象:瞭解有效的創建對象

相反,通過維護自己的對象 池是一個壞主意,除非池中的對象是極其避免對象創建 重量級

因此,如果我們開始創建過多的bean聲明,那麼使用容器內創建的spring bean可能會導致一些傷害。舉例來說,我在declration供應Factory對象的insstance:

<bean id="userFactory" class="com.foo.factory.UserFactory"> 
    <property name="creatorMap"> 
     <!-- map's declaration --> 
    </property> 
</bean> 

public class UserFactory{ 
    Map<UserType, Creator> creators; 

    public User create(UserType t){ 

     return creators.get(t).create(); 
    } 
} 

public enum UserType{ 
    VIP, 
    GUEST, 
    ACTIVE, 
    //etc 
} 

public interface Creator{ 
    public User create(); 
} 

是不是一個壞主意,春豆內宣佈該工廠?

+0

您對創建這種工廠有什麼疑慮? – Arek

+0

@Ajan因爲在項目中我可能有數百個不同的工廠。 –

回答

2

我認爲約書亞的建議的上下文是昂貴的創建對象 - extremely heavyweights。你可以創建對象池來重用,並避免昂貴的創建,例如 連接池等。你所指的框架(Spring)本身在基礎架構代碼中使用了很多這樣的工廠。所以我認爲它應該 歸結爲您的應用程序是否需要這樣的工廠。使用這種工廠的每個應用程序線程都會創建它自己的上下文對象,並且數字將取決於對工廠bean的這種請求。

+0

因此,使用這樣的工廠不會有害,是嗎? –

+0

你的用例似乎並沒有創建非常昂貴的對象,所以這些應該沒問題。如果您不在Spring容器中創建這些工廠,您可以在其他位置創建這些工廠,並且不會從容器管理的工廠中獲得任何好處。 – Shailendra

+0

謝謝。事實上,我需要爲不同的項目使用不同的工廠(包含創建者的不同地圖)。這就是我決定這麼做的原因...... –