1、假如创建User很麻烦
package com.test.pool;
public class User
{
private int id;
private String name;
public User()
{
}
public User(String key)
{
if(null == key || key.indexOf("_") == -1)
throw new IllegalArgumentException("错误构造 " + key);
String[] str = key.split("_");
if(str.length != 2)
throw new IllegalArgumentException("错误构造 " + key);
int one = Integer.parseInt(str[0]);
this.id = one;
this.name = str[1];
}
public User(int id, String name)
{
this.id = id;
this.name = name;
}
public int getId()
{
return id;
}
public void setId(int id)
{
this.id = id;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
@Override
public String toString()
{
return "id : " + id + ", name : " + name;
}
}
ObjectFactory:
package com.test.pool;
import org.apache.commons.pool.BaseKeyedPoolableObjectFactory;
public class MyObjectFactory extends BaseKeyedPoolableObjectFactory<String, User>
{
@Override
public User makeObject(String key) throws Exception
{
System.out.println("创建了 " + key);
return new User(key);
}
}
测试类:
package com.test.pool;
import org.apache.commons.pool.KeyedObjectPool;
import org.apache.commons.pool.KeyedObjectPoolFactory;
import org.apache.commons.pool.KeyedPoolableObjectFactory;
import org.apache.commons.pool.impl.StackKeyedObjectPoolFactory;
public class Main
{
public static void main(String[] args)
{
KeyedPoolableObjectFactory<String, User> factory = new MyObjectFactory();
KeyedObjectPoolFactory<String, User> poolFactory = new StackKeyedObjectPoolFactory<String, User>(
factory);
KeyedObjectPool<String, User> pool = poolFactory.createPool();
try
{
String str = "1_詹姆斯";
User u = pool.borrowObject(str);
System.out.println("\t\t借出来了 : " + u);
System.out.println("\t归还了 : " + u);
pool.returnObject(str, u);
String str1 = "2_杜兰特";
u = pool.borrowObject(str1);
System.out.println("\t\t借出来了 : " + u);
System.out.println("\t归还了 : " + u);
pool.returnObject(str1, u);
String str2 = "3_姚明";
u = pool.borrowObject(str2);
System.out.println("\t\t借出来了 : " + u);
System.out.println("\t归还了 : " + u);
pool.returnObject(str2, u);
u = pool.borrowObject(str);
System.out.println("\t\t借出来了 : " + u);
u = pool.borrowObject(str1);
System.out.println("\t\t借出来了 : " + u);
u = pool.borrowObject(str2);
System.out.println("\t\t借出来了 : " + u);
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
try
{
pool.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
}