在Pool2组件中,主要的两个类
- PooledObjectFactory用于管理被池化的对象的产生、激活、挂起、校验和销毁;
- ObjectPool用于管理要被池化的对象的借出和归还,并通知PooledObjectFactory完成相应的工作;
package com.cdw.pool;
import org.apache.commons.pool2.BasePooledObjectFactory;
import org.apache.commons.pool2.PooledObject;
import org.apache.commons.pool2.impl.DefaultPooledObject;
public class StringBufferFactory extends BasePooledObjectFactory<StringBuffer>{
@Override
public StringBuffer create() throws Exception {
return new StringBuffer();
}
/**
* Use the default PooledObject implementation.
*/
@Override
public PooledObject<StringBuffer> wrap(StringBuffer buffer) {
return new DefaultPooledObject<StringBuffer>(buffer);
}
/**
* When an object is returned to the pool, clear the buffer.
*/
@Override
public void passivateObject(PooledObject<StringBuffer> pooledObject) {
pooledObject.getObject().setLength(0);
}
}
package com.cdw.pool; import java.io.IOException; import java.io.Reader; import org.apache.commons.pool2.ObjectPool; public class ReaderUtil { private ObjectPool<StringBuffer> pool; public ReaderUtil(ObjectPool<StringBuffer> pool) { this.pool = pool; } /** * Dumps the contents of the {@link Reader} to a String, closing the {@link Reader} when done. */ public String readToString(Reader in) throws IOException { StringBuffer buf = null; try { buf = pool.borrowObject(); for (int c = in.read(); c != -1; c = in.read()) { buf.append((char) c); } return buf.toString(); } catch (IOException e) { throw e; } catch (Exception e) { throw new RuntimeException("Unable to borrow buffer from pool" + e.toString()); } finally { try { in.close(); } catch (Exception e) { // ignored } try { if (null != buf) { pool.returnObject(buf); } } catch (Exception e) { // ignored } } } }
package com.cdw.pool; import java.io.File; import java.io.FileReader; import org.apache.commons.pool2.ObjectPool; import org.apache.commons.pool2.PooledObjectFactory; import org.apache.commons.pool2.impl.GenericObjectPool; public class Test { public static void main(String[] args) throws Exception { //1:创立pooledObjectFactory PooledObjectFactory<StringBuffer> sbFactory = new StringBufferFactory(); //2:创立ObjectPool ObjectPool<StringBuffer> bjPool = new GenericObjectPool<StringBuffer>(sbFactory); ReaderUtil readerUtil = new ReaderUtil(bjPool); String s = readerUtil.readToString(new FileReader(new File("dbcp.properties"))); System.out.println(s); } }