13连接池与分页..docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
13连接池与分页.

连接池*连接频繁的打开和关闭,影响程序的运行效率*连接管理:预先创建一组连接,有的时候每次取出一个,用完后,放回自定义连接池代理:使用代理可以在不实现接口的情况下,对接口实现功能扩展,满足额外的业务逻辑。Java中代理模式:静态/动态/Cglib代理(Spring)使用动态代理,可以检测接口中方法的执行!如何对Connection对象,生成一个代理对象:|--Proxystatic Object newProxyInstance(ClassLoader loader, 当前使用的类加载器Class?[] interfaces, 目标对象(Connection)实现的接口类型InvocationHandler h 事件处理器:当执行上面接口中的方法的时候,就会自动触发事件处理器代码,把当前执行的方法(method)作为参数传入。) public class MyPool {private intinit_count = 3; // 初始化连接数目private intmax_count = 6; // 最大连接数private intcurrent_count = 0; // 记录当前使用连接数// 连接池(存放所有的初始化连接)private LinkedListConnection pool = new LinkedListConnection();// 1. 构造函数中,初始化连接放入连接池public MyPool() {// 初始化连接for (int i = 0; i init_count; i++) {// 记录当前连接数目current_count++;// 创建原始的连接对象Connection con = createConnection();// 把连接加入连接池pool.addLast(con);}}// 2. 创建一个新的连接的方法private Connection createConnection() {try {Class.forName(com.mysql.jdbc.Driver);// 原始的目标对象final Connection con = DriverManager.getConnection(jdbc:mysql://localhost:3306/oliver, root, root);/********** 对con对象代理 **************/// 对con创建其代理对象Connection proxy = (Connection) Proxy.newProxyInstance(con.getClass().getClassLoader(), // 类加载器// con.getClass().getInterfaces(), // 当目标对象是一个具体的类的时候// //这里的目标对象是转化为接口Connection,故不能用这个。new Class[] { Connection.class }, // 目标对象是一个实现的接口new InvocationHandler() { // 当调用con对象方法的时候,自动触发事务处理器public Object invoke(Object proxy, Method method,Object[] args) throws Throwable {// 方法返回值Object result = null;// 当前执行的方法的方法名String methodName = method.getName();// 判断当执行了close方法的时候,把连接放入连接池if (close.equals(methodName)) {System.out.println(begin:当前执行close方法开始!);// 连接放入连接池 (判断..)pool.addLast(con);System.out.println(end: 当前连接已经放入连接池了!);} else {// 调用目标对象方法result = method.invoke(con, args);}return result;}});return proxy;} catch (Exception e) {throw new RuntimeException(e);}}// 3. 获取连接public Connection getConnection() {// 3.1 判断连接池中是否有连接, 如果有连接,就直接从连接池取出if (pool.size() 0) {return pool.removeFirst();}// 3.2 连接池中没有连接:判断,如果没有达到最大连接数,创建;if (current_count max_count) {// 记录当前使

文档评论(0)

dashewan + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档