数据源,动态代理
来源:互联网 发布:ubuntu和ubuntu mate 编辑:程序博客网 时间:2024/05/29 19:05
package com.huowolf.jdbc.pool;import java.io.InputStream;import java.io.PrintWriter;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.SQLFeatureNotSupportedException;import java.util.LinkedList;import java.util.Properties;import java.util.logging.Logger;import javax.sql.DataSource;//一个标准的数据源public class MyDataSource1 implements DataSource {private static String driverClassName;private static String url;private static String user;private static String password;private static LinkedList<Connection> pool = new LinkedList<Connection>();//存储连接的池static{try {InputStream in = com.huowolf.JdbcUtil.JdbcUtil.class.getClassLoader().getResourceAsStream("db.properties");Properties props = new Properties();props.load(in);driverClassName = props.getProperty("driverClassName");url = props.getProperty("url");user = props.getProperty("user");password = props.getProperty("password");Class.forName(driverClassName);//初始化10个连接到池中for(int i=0;i<10;i++){Connection conn = DriverManager.getConnection(url, user, password);pool.add(conn);}} catch (Exception e) {e.printStackTrace();}}//从池中获取一个连接@Overridepublic synchronized Connection getConnection() throws SQLException {if(pool.size()>0){final Connection conn = pool.remove();//原有对象//返回动态代理对象return (Connection)Proxy.newProxyInstance(conn.getClass().getClassLoader(), conn.getClass().getInterfaces(), new InvocationHandler() {@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {if("close".equals(method.getName())){return pool.add(conn);}else{return method.invoke(conn, args);}}});}else{throw new RuntimeException("对比起!服务器真忙");}}@Overridepublic Connection getConnection(String username, String password)throws SQLException {return null;}@Overridepublic PrintWriter getLogWriter() throws SQLException {return null;}@Overridepublic int getLoginTimeout() throws SQLException {return 0;}@Overridepublic void setLogWriter(PrintWriter out) throws SQLException {}@Overridepublic void setLoginTimeout(int seconds) throws SQLException {}@Overridepublic boolean isWrapperFor(Class<?> iface) throws SQLException {return false;}@Overridepublic <T> T unwrap(Class<T> iface) throws SQLException {return null;}@Overridepublic Logger getParentLogger() throws SQLFeatureNotSupportedException {return null;}}
0 0
- 数据源,动态代理
- 【java】动态代理+ThreadLocal实现数据源及事务管理
- 动态代理模式--自定义数据源的终极…
- JDBC/InvocationHandler动态代理实现数据库连接池、数据源
- 使用JDK动态代理方式实现自己的数据源
- 动态数据源
- 动态数据源
- UITableView数据源代理方法
- 数据源的编写(开发中不写)、使用动态代理覆写Connection的close方法
- Java中用动态代理实现标准的DataSource数据源连接池
- UICollectView 简介(代理,数据源)
- 代理-->静态代理&动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- python模拟Get请求保存网易歌曲的url
- CXF开发RESTful风格的Web Service
- 4103: [Thu Summer Camp 2015]异或运算
- 黑马程序员--NSArray,NSString,NSSet,NSDictionary,NSNumber,NSValue 及其可变(NSMutable..)
- 单一职责原则-和-开放-封闭原则-和-依赖倒转原则
- 数据源,动态代理
- 各种编码UNICODE、UTF-8、ANSI、ASCII、GB2312、GBK详解
- onCreate()方法中获取View的宽高
- Android中Fragment的知识
- python定时器爬取豆瓣音乐Top榜歌名
- 迭代器模式
- 黑马程序员--完整的设计一个动画从开始到退出
- class struct关键字区别
- 黑马程序员--搭建界面,九宫格