动态代理~插头是不固定的
/*动态代理和静态代理的区别是: 静态代理之所以静态是知道他要代理的东西是什么,也就是插槽是固定的,他只能接收固定的插座*/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); } }