学习笔记:方法增强
来源:互联网 发布:光子嫩肤 知乎 编辑:程序博客网 时间:2024/05/16 09:16
某个类的方法需要增强的时候,有三种方法:
1、写一个子类,覆盖该方法
2、写一个包装类,增强该方法
3、用动态代理,返回一个代理对象出去,拦截该方法的调用,对该方法进行增强
在学习数据库连接池的时候,对数据库的连接放在池中,当程序获取的connection使用完,调用close方法,会将连接交还给数据库,而我们需要将它还给连接池,connection的close方法需要增强。
第一个方法,写一个connection的子类,重写close方法:
该增强方法这里不能使用,因为原connection的创建由数据库驱动完成,其中包含有信息,而创建的子类由自己创建,缺少一些信息,不能完成原connection的功能。
该方法适用于不包含某些必要信息的类的增强。
第二个方法,用包装设计模式对某个对象进行增强:
1、写一个类,实现与被增强对象(mysql的connection)相同的接口
2、定义一个变量,指向被增强对象
3、定义一个构造方法,接收被增强对象
4、覆盖想增强的方法
5、对于不想增强的方法,直接调用被增强对象的方法
class MyConnection implements Connection{private Connection conn;private List pool;public MyConnection(Connection conn,List pool){this.conn = conn;this.pool = pool;}public void close() throws SQLException {pool.add(conn);}该方法实现了connection的close方法的增强,不过缺点是需要写的方法太多。。
public Statement createStatement() throws SQLException {return this.conn.createStatement();}public Statement createStatement(int resultSetType, int resultSetConcurrency)throws SQLException {// TODO Auto-generated method stubreturn null; //需要改成this.conn.createStatement}public Statement createStatement(int resultSetType,int resultSetConcurrency, int resultSetHoldability)throws SQLException {// TODO Auto-generated method stubreturn null;}public boolean getAutoCommit() throws SQLException {// TODO Auto-generated method stubreturn false;}public String getCatalog() throws SQLException {// TODO Auto-generated method stubreturn null;}//还没完!!!!!
第三个方法,用动态代理,返回一个代理对象出去,拦截close方法的调用,对close进行增强:
(只懂个大概。。方老大写的)
public Connection getConnection() throws SQLException {if(list.size()>0){final Connection conn = list.removeFirst();return (Connection) Proxy.newProxyInstance(JdbcPool.class.getClassLoader(), conn.getClass().getInterfaces(), new InvocationHandler(){public Object invoke(Object proxy, Method method, Object[] args)throws Throwable {if(!method.getName().equals("close")){return method.invoke(conn, args);}else{list.add(conn);return null;}}});}else{throw new RuntimeException("对不起,数据库忙");}}
- 学习笔记:方法增强
- 学习笔记-增强学习
- 增强学习笔记
- 增强学习:学习笔记整理
- 空域图像增强学习笔记
- 增强for循环学习笔记
- 增强学习之蒙特卡洛方法
- 频域图像增强(学习笔记)
- Unity 学习笔记 增强现实效果教程
- 5.【SELinux学习笔记】类型增强
- 【java学习笔记】for增强循环
- Java学习笔记---增强for循环
- Java-增强for循环(学习笔记)
- 深度增强学习入门笔记(一)
- 深度增强学习入门笔记(二)
- 深度学习中的数据增强方法
- DL学习笔记【22】增强学习(Reinforcement Learning)
- [增强学习][Reinforcement Learning]学习笔记与回顾-1
- C++中const用法总结
- Bjontegaard metric :BDBR和BD-PSNR
- PHP教程:PHPUnit学习笔记(二)PHPUnit基本用法
- JAVA基础/构造方法
- visual studio 2010 项目文件""已被重命名或已不在解决方案中"---解决办法
- 学习笔记:方法增强
- 下载yutube视频的方法 超方便
- PHP教程:PHPUnit学习笔记(三)测试方法进阶
- Permutations II
- 基本语言细节--《深度探索C++对象模型》--(4)The Semantics of Function-总结点
- bootstrap中的thumbnails
- 打开magento开发的调试模式(开发者模式)
- PHP教程:PHPUnit学习笔记(四)断言详解
- .Net 微信平台的开发者验证