定义一个MyConnection类现实Connection
public class MyConnection implements Connection{
private LinkedList<Connection> pool;
private Connection connection; //被增强的对象
//在MyConnection里面需要得到被增强的connection对象(通过构造方法传进去)
public MyConnection(LinkedList<Connection> pool, Connection connection) {
this.pool = pool;
this.connection = connection;
}
@Override
//改写close()的逻辑, 变成归还
public void close() throws SQLException {
pool.addLast(connection);
}
@Override
//其它方法的逻辑, 还是调用被增强connection对象之前的逻辑
public PreparedStatement prepareStatement(String sql) throws SQLException {
return connection.prepareStatement(sql);
}
}
定义一个MyDataSource03类实现DataSource
public class MyDataSource03 implements DataSource {
private static LinkedList<Connection> pool;
//程序初始化的时候, 创建5个连接 存到LinkedList
static {
try {
pool = new LinkedList<Connection>();
for (int i = 0; i < 5; i++) {
pool.add(JdbcUtils.getConnection());
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 返回池子里面连接的数量
* @return
*/
public static int getCount(){
return pool.size();
}
/**
* 提供连接
* @return
* @throws SQLException
*/
@Override
public Connection getConnection() throws SQLException {
Connection connection = pool.removeFirst(); //被增强的connection
//返回之前 把connection增强一下 变成MyConnection, 再返回MyConnection
MyConnection myConnection = new MyConnection(pool, connection);
return myConnection;
}
}