了解有效的创建对象

问题描述:

布洛赫写了下面关于创建对象:了解有效的创建对象

相反,通过维护自己的对象 池是一个坏主意,除非池中的对象是极其避免对象创建 重量级

因此,如果我们开始创建过多的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因为在项目中我可能有数百个不同的工厂。 –

我认为约书亚的建议的上下文是昂贵的创建对象 - extremely heavyweights。你可以创建对象池来重用,并避免昂贵的创建,例如 连接池等。你所指的框架(Spring)本身在基础架构代码中使用了很多这样的工厂。所以我认为它应该 归结为您的应用程序是否需要这样的工厂。使用这种工厂的每个应用程序线程都会创建它自己的上下文对象,并且数字将取决于对工厂bean的这种请求。

+0

因此,使用这样的工厂不会有害,是吗? –

+0

你的用例似乎并没有创建非常昂贵的对象,所以这些应该没问题。如果您不在Spring容器中创建这些工厂,您可以在其他位置创建这些工厂,并且不会从容器管理的工厂中获得任何好处。 – Shailendra

+0

谢谢。事实上,我需要为不同的项目使用不同的工厂(包含创建者的不同地图)。这就是我决定这么做的原因...... –