commons-pool2源码走读(二) 对象工厂PooledObjectFactory接口

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq447995687/article/details/80427301

commons-pool2源码走读(二) 对象工厂PooledObjectFactory <T> 接口

PooledObjectFactory <T> 顾名思义是一个池对象的工厂类,通过该类获得一个池对象的包装类PooledObject<T> 同时该接口还定义了对池对象的一些操作,比如校验、销毁、激活、卸载。下面来看看其接口的具体定义和实现。

1. 接口定义

public interface PooledObjectFactory<T> {
    //创建
    PooledObject<T> makeObject() throws Exception;

    //销毁
    void destroyObject(PooledObject<T> p) throws Exception;

    //验证
    boolean validateObject(PooledObject<T> p);

    //激活
    void activateObject(PooledObject<T> p) throws Exception;

    //卸载(钝化)
    void passivateObject(PooledObject<T> p) throws Exception;
}

该工厂接口定义的方法,完整覆盖了一个池对象,在池中的整个生命周期需要经历的步骤。再回顾下这些操作在池对象的生命周期的什么时候发生:
这里写图片描述

2. 抽象空实现BasePooledObjectFactory<T>

该抽象类定义如下:

public abstract class BasePooledObjectFactory<T> extends BaseObject implements 
PooledObjectFactory<T> {
    public abstract T create() throws Exception;

    public abstract PooledObject<T> wrap(T obj);

    @Override
    public PooledObject<T> makeObject() throws Exception {
        return wrap(create());
    }

    @Override
    public void destroyObject(final PooledObject<T> p)
        throws Exception  {
        // The default implementation is a no-op.
    }

    @Override
    public boolean validateObject(final PooledObject<T> p) {
        return true;
    }

    @Override
    public void activateObject(final PooledObject<T> p) throws Exception {
        // The default implementation is a no-op.
    }

    @Override
    public void passivateObject(final PooledObject<T> p)
        throws Exception {
        // The default implementation is a no-op.
    }
}

BasePooledObjectFactory<T> 只是PooledObjectFactory<T> 的一个空实现,同时抽象出 create()和 wrap(T obj);方法,是工厂的定义更加贴切,毕竟创建的对象是T对象而不是包装类。

3.自定义实现

该接口需自行实现,可以实现PooledObjectFactory <T> 或者继承BasePooledObjectFactory<T> 显然二者没有明显的区别。

猜你喜欢

转载自blog.csdn.net/qq447995687/article/details/80427301
今日推荐