首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Commons Pooling:如何实例化混凝土池?

Commons Pooling:如何实例化混凝土池?
EN

Stack Overflow用户
提问于 2012-06-01 00:38:14
回答 2查看 6.2K关注 0票数 1

我已经将commons-pooling-1.6.jar添加到我的类路径中,并尝试实例化一个StackObjectPool,但每次都会失败:

代码语言:javascript
复制
// Deprecated.
ObjectPool<T> oPool = new StackObjectPool<T>();

// Error: Cannot instantiate the type BasePoolableObjectFactory<T>.
PoolableObjectFactory<T> oFact = new BasePoolableObjectFactory<T>();
ObjectPool<T> oPool = new StackObjectPool<T>(oFact);

这是一个完全不推荐使用的API吗?如果是这样的话,有哪些开源方案可以替代Commons Pooling呢?否则,如何实例化StackObjectPool

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-01 01:43:33

您需要编写自己的工厂,可能会扩展BasePoolableObjectFactory。更多信息请看这里:http://commons.apache.org/pool/examples.html

下面是一个创建StringBuffers的PoolableObjectFactory实现:

代码语言:javascript
复制
import org.apache.commons.pool.BasePoolableObjectFactory; 

public class StringBufferFactory extends BasePoolableObjectFactory<StringBuffer> { 
    // for makeObject we'll simply return a new buffer 
    public StringBuffer makeObject() { 
        return new StringBuffer(); 
    } 

    // when an object is returned to the pool,  
    // we'll clear it out 
    public void passivateObject(StringBuffer buf) { 
        buf.setLength(0); 
    } 

    // for all other methods, the no-op  
    // implementation in BasePoolableObjectFactory 
    // will suffice 
}

然后按如下方式使用它:

代码语言:javascript
复制
new StackObjectPool<StringBuffer>(new StringBufferFactory())
票数 5
EN

Stack Overflow用户

发布于 2012-06-01 02:02:35

大多数库的输入都集中在对象工厂上。这将告诉池在需要时如何创建新对象。例如,对于一个连接池,所有这些都连接到具有相同配置的相同数据库,如用户、密码、url、驱动程序。

需要创建一个扩展BasePoolableObjectFactory类的具体工厂,并编写makeObject方法,如下例所示。

代码语言:javascript
复制
static class MyObject {
    private String config;

    public MyObject(String config) {
        this.config = config;
    }
}

static class MyFactory extends BasePoolableObjectFactory<MyObject> {

    public String config;

    public MyFactory(String config) {
        this.config = config;
    }

    @Override
    public MyObject makeObject() throws Exception {
        return new MyObject(config);
    }
}

public static void main(String[] args) {
    MyFactory factory = new MyFactory("config parameters");
    StackObjectPool<MyObject> pool = new StackObjectPool<>(factory);
}

Swaranga Sarma编成了一个非常有趣的例子。请在上查看

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10837713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档