版权声明:本文为博主原创文章,未经博主允许不得转载。 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> 显然二者没有明显的区别。