[code]
/*
动态代理和静态代理的区别是:
静态代理之所以静态是知道他要代理的东西是什么,也就是插槽是固定的,他只能接收固定的插座
*/
class MyConnectionHandler implements InvocationHandler{
private Connection realConnection;
private Connection warpedConn ;
private DataSource dataSource;
MyConnectionHandler(DataSource dataSource){
this.dataSource = dataSource;
}
Connection bind(Connection conn){ //返回一个代理对象
this.warpedConn = (Connection)Proxy.newProxyInstance(
this.getClass().getClassLoader(),
new Class[]{Connection.class},
this); //Proxy这个类可以理解成他也会写代码,他会用类加载器写一个实现了Connection.class的接口的类,而这个类的具体实现由MyConnectionHandler 来完成
return warpedConn;
}
public Object invoke(Object proxy,Method method ,Object[] args)throws Throwable{
if("close".equals(method.getName())){ //对我们制定的方法做处理
this.dataSource.connsPool.addLast(this.warpedConn);
}
return method.invoke(this.conn,args);
}
}
[/code]
/*
动态代理和静态代理的区别是:
静态代理之所以静态是知道他要代理的东西是什么,也就是插槽是固定的,他只能接收固定的插座
*/
class MyConnectionHandler implements InvocationHandler{
private Connection realConnection;
private Connection warpedConn ;
private DataSource dataSource;
MyConnectionHandler(DataSource dataSource){
this.dataSource = dataSource;
}
Connection bind(Connection conn){ //返回一个代理对象
this.warpedConn = (Connection)Proxy.newProxyInstance(
this.getClass().getClassLoader(),
new Class[]{Connection.class},
this); //Proxy这个类可以理解成他也会写代码,他会用类加载器写一个实现了Connection.class的接口的类,而这个类的具体实现由MyConnectionHandler 来完成
return warpedConn;
}
public Object invoke(Object proxy,Method method ,Object[] args)throws Throwable{
if("close".equals(method.getName())){ //对我们制定的方法做处理
this.dataSource.connsPool.addLast(this.warpedConn);
}
return method.invoke(this.conn,args);
}
}
[/code]