package cn.code.demo; import java.sql.Connection; import java.sql.SQLException; import org.apache.commons.dbcp2.BasicDataSource; import org.junit.Test; /* * 数据库连接池 * 池参数: * 初始化大小:10个 * 最小空闲连接数:3个 * 增量:一次创建的最小单位 5个 * 最大空闲连接数 12个 * 最大连接数 20个 * 最大等待时间:1000毫秒 * 连接池也是用四大连接参数 * 实现的接口 * javax.sql.DataSource接口! * */ public class DBCPDemo1 { @Test public void fun1(){ /* * 1.创建连接池对象 * 2.配置四大参数 * 3.配置池参数 * 4.得到连接对象 * */ BasicDataSource dataSource = new BasicDataSource(); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl("jdbc:mysql://localhost:3306/mydb1"); dataSource.setUsername("root"); dataSource.setPassword("123"); dataSource.setMaxTotal(20); dataSource.setMaxWaitMillis(1000); dataSource.setMaxIdle(3); Connection con =null; try { con = dataSource.getConnection(); System.out.println(con.getClass().getName()); /* * 连接池内部使用四大参数创建了链接对象,即mysql驱动提供的Connection * 连接池使用mysql的链接对象进行了装饰,只对close()方法进行了增强 * 装饰之后的Connection close()方法,用来把当前链接归还给池(装饰者设计模式) * */ } catch (SQLException e) { throw new RuntimeException(e); }finally{ try { con.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
装饰者模式: 对象增强的手段 *继承 *装饰者模式 *动态代理 被增强的对象可以切换 增强内容可以切换 --------------------- 继承: 缺点: 1、增强的内容是死的,不能动 2、被增强的对象也是死的 使用继承回事类增多; class 咖啡类{} class 有糖咖啡 extends 咖啡{} class 加奶咖啡 extends 咖啡{} class 加盐咖啡 extends 咖啡{} class 加糖加奶 extends 加奶{} ------------------------------- 装饰者模式: 1、增强的内容是死的 2、被增强的对象时任意的 class 咖啡类{} class 有糖咖啡 extends 咖啡{} class 加奶咖啡 extends 咖啡{} class 加盐咖啡 extends 咖啡{} 咖啡a = new 加糖(); 咖啡 b = new 加盐(a);//对a进行装饰,就是给a加盐 咖啡 c = new 加奶(b); java io流中大量应用!、 四大家族: 1、字节:inputStream outputStream 2、字符:reader、writer InputStream FileInputStream:他是一个节点流,就是和一个资源绑定在一起的!文件 BufferedInputStream : 他是装饰流,创建时必须给一个底层对象,然后我不管你给我的是什么流,我都会给你它添加缓冲区! new BuferedInputStream(new FileInputStream("c:/xxx.txt")); ObjectInputStream(new BuferedInputStream(new FileInputStream("c:/xxx.txt"));); ByteArrayInputStream(byte[] buf); GZIPIputStream(); -------------------- 装饰用途:不知道被增强对象的具体类型时,可以使用! 1、是你还有你,一切拜托你! class MyConnection implements Connection{ private Connection con; public MyConnection(Connection con ){//通过构造器传递底层对象 this.con=con; } //一切拜托你 public Statement createStatement(){ return con.createStatement(); } //增强方法 public void close(){ 把当前链接归还给池! } } Connection con = 通过四大参数创建链接对象由mysql提供 Connection con1 = new MyConnection(con); con1.close();