实现了javax.sql.DataSource的才是标准的数据库连接池,按照字面意思,一般称之为数据源。
对于一个已知类的某个方法进行功能上的改变有以下三种方式:
1、定义子类,扩展父类的某个功能。(此处行不通)
2、利用包装设计模式改写原有的类的功能
a、编写一个类实现与被改写类(com.mysql.jdbc.Connection)相同的接口
b、定义一个引用,记住被改写类的实例
c、定义构造方法,传入被改写类的实例
d、对于要改写的方法,改写即可
e、对于不需要改写的方法,调用原有的对象的对应方法
针对已经实现的类进行改写它的方法。
*****包装设计模式
*****默认适配器设计模式
上一篇介绍动态代理模式
1 package cn.itcast.jdbc.pool; 2 3 import java.io.InputStream; 4 import java.sql.Connection; 5 import java.sql.DriverManager; 6 import java.util.LinkedList; 7 import java.util.Properties; 8 9 import cn.itcast.util.JdbcUtil; 10 //数据库连接池的原理 11 public class SimpleConnectionPool { 12 private static String driverClassName; 13 private static String url; 14 private static String user; 15 private static String password; 16 private static LinkedList<Connection> pool = new LinkedList<Connection>();//存储连接的池 17 static{ 18 try { 19 InputStream in = JdbcUtil.class.getClassLoader().getResourceAsStream("db.properties"); 20 Properties props = new Properties(); 21 props.load(in); 22 driverClassName = props.getProperty("driverClassName"); 23 url = props.getProperty("url"); 24 user = props.getProperty("user"); 25 password = props.getProperty("password"); 26 Class.forName(driverClassName); 27 28 //初始化10个连接到池中 29 for(int i=0;i<10;i++){ 30 Connection conn = DriverManager.getConnection(url, user, password); 31 pool.add(conn); 32 } 33 // System.out.println("初始化的连接有:"); 34 // for(Connection c:pool) 35 // System.out.println(c); 36 } catch (Exception e) { 37 e.printStackTrace(); 38 } 39 } 40 public synchronized static Connection getConnection(){ 41 if(pool.size()>0){ 42 Connection conn = pool.remove();//从池中拿到连接,并从池中删除掉 43 44 // System.out.println("取出的是:"+conn); 45 // System.out.println("池中还有:"); 46 // for(Connection c:pool) 47 // System.out.println(c); 48 return conn; 49 }else{ 50 System.out.println("对不起!服务器真忙"); 51 return null; 52 } 53 } 54 public static void release(Connection conn){//把连接放回池中 55 pool.add(conn); 56 // System.out.println("回来的是:" +conn); 57 // System.out.println("回来后池中的连接:"); 58 // for(Connection c:pool) 59 // System.out.println(c); 60 } 61 }