java - 了解有效的对象创建

标签 java spring

J. Bloch 写了以下关于对象创建的内容:

Conversely, avoiding object creation by maintaining your own object pool is a bad idea unless the objects in the pool are extremely heavyweight

因此,如果我们开始以声明方式创建太多 bean,则使用在容器内创建的 spring bean 可能会造成一些危害。例如,我通过声明提供 Factory 对象的实例:

<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();
}

在 Spring beans 中声明这样的工厂不是一个坏主意吗?

最佳答案

我认为 Joshua 建议的背景是创建对象的成本很高 - 极其重量级。您创建对象池以重用并避免昂贵的创建,例如 连接池等。您所指的框架(Spring)本身在其基础设施代码中使用了大量此类工厂。所以我认为应该 归结为您的应用程序中是否需要此类工厂。使用此类工厂的每个应用程序线程将创建它自己的上下文对象,并且数量将取决于对工厂 bean 的此类请求。

关于java - 了解有效的对象创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30977922/

相关文章:

java - 通配符扩展最终可选类

java - Spring 是否确保 Closeable bean 以正确的顺序关闭?

java - Spring登录系统

Spring 3 MVC - 调用 Controller 但未找到 View

java - 将 HQL 'in' 限制转换为条件

java - 在java语言中,为了制作像textmate这样的文本编辑器,我应该使用什么小部件

spring - CDI @ViewScoped bean 功能不可用

java - 为什么 Spring @Value 与 @Controller 不兼容?

java - Android JUnit 未捕获来自 Runtime.getRuntime().exec() 的 IOException

java - 类线程在实例初始化时是否安全