了解有效的创建对象
布洛赫写了下面关于创建对象:了解有效的创建对象
相反,通过维护自己的对象 池是一个坏主意,除非池中的对象是极其避免对象创建 重量级
因此,如果我们开始创建过多的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();
}
是不是一个坏主意,春豆内宣布该工厂?
我认为约书亚的建议的上下文是昂贵的创建对象 - extremely heavyweights
。你可以创建对象池来重用,并避免昂贵的创建,例如 连接池等。你所指的框架(Spring)本身在基础架构代码中使用了很多这样的工厂。所以我认为它应该 归结为您的应用程序是否需要这样的工厂。使用这种工厂的每个应用程序线程都会创建它自己的上下文对象,并且数字将取决于对工厂bean的这种请求。
因此,使用这样的工厂不会有害,是吗? –
你的用例似乎并没有创建非常昂贵的对象,所以这些应该没问题。如果您不在Spring容器中创建这些工厂,您可以在其他位置创建这些工厂,并且不会从容器管理的工厂中获得任何好处。 – Shailendra
谢谢。事实上,我需要为不同的项目使用不同的工厂(包含创建者的不同地图)。这就是我决定这么做的原因...... –
您对创建这种工厂有什么疑虑? – Arek
@Ajan因为在项目中我可能有数百个不同的工厂。 –