代理模式----尝试写自己的连接池
来源:互联网 发布:黑帽seo劫持 编辑:程序博客网 时间:2024/06/05 22:47
代理模式本质上是利用java.lang.reflect.Proxy类中的一个静态方法:
newProxyInstance(
ClassLoader loader,
Class<?>[] interfaces,
InvocationHandler h)
//参数1:必须给一个加载被代理对象的类加载器,注意通常要用与当前类相同的类加载器,否则生成的代理对象在当前类中无法使用
//参数2:给一个接口数组,该数组中的所有接口将会是代理后的对象要实现的,同时也是以后通过这些接口调用代理后对象的方法(功能)
//参数3: 代理对象所有通过接口调用的方法都是通过下面的类反射方式调用的,我们可以在该反射方法中更改(拦截、增强)原型方法的功能 帮我们创建出一个代理后的对象, 用代理后的对象去执行方法,会被拦截! 具体拦截的动作(功能)
由参数三h来实现。
public class ConnUtils {
//需求:想拿到代理后的connection;改掉其中的close()函数
private static List<Connection> pool=new ArrayList<Connection>();
private static final int MAX=3;
static{
Properties p=new Properties();
try {
p.load(ConnEndUtils.class.getClassLoader().getResourceAsStream("jdbc.properties"));
String driver=p.getProperty("driver");
String url=p.getProperty("url");
String user=p.getProperty("username");
String pwd=p.getProperty("password");
Class.forName(driver);
for(int i=0;i<MAX;i++){//每个connection都要被代理
final Connection con=DriverManager.getConnection(url, user, pwd);
Object proxyObj=Proxy.newProxyInstance(
ConnUtils.class.getClassLoader(),
new Class[]{Connection.class},
new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
if(method.getName().equals("close")){
//因为池循环利用;所以当调用这个函数时把connection还到池中
pool.add((Connection)proxy);
}
//其他函数原样执行
return method.invoke(con, args);
}
});
pool.add((Connection)proxyObj);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
- 代理模式----尝试写自己的连接池
- 尝试着写自己的代码生成器
- 尝试自己写简单的retinex
- 代理模式——动态代理(自己写一个)
- 设计模式之代理模式(实现自己的数据库连接池)
- 设计模式: 自己手动写一个代理模式
- 自己尝试写的非常简单串口调试助手
- 一起尝试写一个自己的小软件
- 自己写的JDK动态代理类
- 自己写JDBC连接池
- 继承?静态代理?写一个自己的动态代理吧
- 自己写的一个数据库连接池的使用
- c++尝试写一个代理类
- 用简单的驱动,自己写一个连接池
- 36.自己写的一个开源连接池功能
- 自己对代理模式的一点理解
- 【设计模式】代理模式实现连接池
- 自己尝试着写PHP扩展
- asp.net mvc webform和razor的page基类区别
- UML 之 类图
- 博客园 首页 新随笔 联系 订阅 管理 C# 访问修饰符internal的访问范围误区释疑
- logrotate机制和原理
- 畅通工程(并查集)
- 代理模式----尝试写自己的连接池
- Noip 2013 提高组 货车运输
- hdu2426 km算法map数组初始化的一些注意事项
- 2017年如何成为全栈工程师,这些技能是你必须具备的!
- Android用ImageView显示本地和网上的图片
- 色环电阻识别
- LTS分布式任务框架light-task-scheduler环境搭建
- Spring中注解和注入
- 递归与动态规划---龙与地下城游戏问题