day18 15.自定义连接池
我们写的是连接池吗?Connection对象绝对不能关。现在写的玩意不是连接池。因为现在讲的是JDBC,连接池也是JDBC里面的,人家那是SUN公司定义的标准。标准,你那不是标准。既然是标准,你做连接池得符合人标准。DataSource才是数据源/连接池。你要做一连接池必须实现这接口,所有的连接池必须实现这个接口。
DataSource是子接口,子接口有父接口嘛。父接口里面的方法也需要重写。
实现了DataSource接口之后我这个就是标准的连接池了。代码要耦合度降低,不要依赖于任何东西,要符合标准。JDBC标准里面Connection对象用完就要close,close()方法不再希望销毁Connection对象,而是把它放回到连接池。原来的close()方法是销毁,现在的close()方法也是销毁,但是我们希望它不是销毁,而是放回到连接池。是指放回到开源的连接池,不是我自己写的连接池,因为你自己写的连接池根本就没做这事。你自己写的连接池根本没实现这个功能。
继承是绝对不靠谱的,close()方法是Connection接口里面的。你不知道具体实现类,你要知道具体实现类也行。但是你要是使用具体实现类,那就要用到驱动程序里面的包了。用到驱动包里面的类又是紧密耦合了。继承也是能做增强的。
装饰模式。
连接池就是一个集合,里面装了几个Connection,用的时候就从里面取一个,取完之后就放回去,这就是最基本的连接池。什么是连接池?实现了DataSource接口。DataSource里面有个getConnection()方法获得连接,那怎么放回去呢?Connection自己的close()方法的行为已经改变了,连接池已经把那个方法的行为改变了,你一调用close()方法就放回去了。