DAO根据时间查看性能

利用Proxy来测试DAO中方法的执行时间 提供一个记录开始时间和结束时间的工具类

/**

 * TimeTestUtil.java

 *

 * Copyright 2008. All Rights Reserved.

 */

package com.easou.yybar.utils;



/** *//**

 * TODO util class TimeTestUtil

 * 

 * Revision History

 *

 * 2008-7-4,Cosmo,created it

 */

public class TimeTestUtil {



    //静态变量:开始时间

    private static Long timeStart;

    

    //静态变量:结束时间

    private static Long timeEnd;

    

    //获取开始时间并显示

    public static void getBeginTime() { 

        timeStart = System.currentTimeMillis();

        System.out.println("当前的开始时间为:" + timeStart);

    }

    

    //获取结束时间并显示

    public static void getEndTime() { 

        timeEnd = System.currentTimeMillis();

        System.out.println("当前的结束时间为:" + timeEnd);

    }

    

    //获取时间差量并显示

    public static void getTimeDispersion() { 

        System.out.println("当前时间差量为:" + (timeEnd - timeStart));

    }

}

建一代理类

/**

 * TimeTestProxy.java

 *

 * Copyright 2008. All Rights Reserved.

 */

package com.easou.yybar;



import java.lang.reflect.InvocationHandler;

import java.lang.reflect.Method;

import java.lang.reflect.Proxy;

import java.util.List;



import com.easou.yybar.model.dao.ICatalogsDAO;

import com.easou.yybar.model.dao.impl.CatalogsDAO;

import com.easou.yybar.model.entity.Catalogs;

import com.easou.yybar.utils.TimeTestUtil;



/** *//**

 * TODO proxy class TimeTestProxy

 * 

 * Revision History

 * 

 * 2008-7-4,Cosmo,created it

 */

public class TimeTestProxy implements InvocationHandler {

    // 代理对象

    private Object proxyObj;



    public TimeTestProxy(Object obj) {

        this.proxyObj = obj;

    }



    // 静态工厂方法

    @SuppressWarnings("unchecked")

    public static Object factory(Object obj) {

        // 放射获取实现类

        Class cls = obj.getClass();

        // 生成新的接口实现并利用invoke调用额外的方法

        return Proxy.newProxyInstance(cls.getClassLoader(),

                cls.getInterfaces(), new TimeTestProxy(obj));

    }



    public Object invoke(Object proxy, Method method, Object[] args)

            throws Throwable {

        // 调用方法前的工作,取得开始时间

        TimeTestUtil.getBeginTime();

        // 调用实现类自身的方法

        Object o = method.invoke(proxyObj, args);

        // 调用方法后的工作,取得结束时间

        TimeTestUtil.getEndTime();

        // 调用方法后的工作,取得时间差值

        TimeTestUtil.getTimeDispersion();

        return o;

    }



}

在test类中使用
/**

 * CatalogsDAOTest.java

 *

 * Copyright 2008. All Rights Reserved.

 */

package com.easou.yybar.catalogs;



import com.easou.yybar.BaseTestCase;

import com.easou.yybar.TimeTestProxy;

import com.easou.yybar.model.dao.ICatalogsDAO;



/** *//**

 * TODO test CatalogsDAOTest.class

 * 

 * Revision History

 * 

 * 2008-6-17,Cosmo,created it

 */

public class CatalogsDAOTest extends BaseTestCase {



    ICatalogsDAO catalogsDao = null;



    @Override

    protected void onSetUp() throws Exception {

        catalogsDao = (ICatalogsDAO) this.getApplicationContext().getBean(

                "catalogsDAO");

        super.onSetUp();

    }



    @Override

    protected void onTearDown() throws Exception {

        catalogsDao = null;

        super.onTearDown();

    }



    @SuppressWarnings("unchecked")

    public void testCatalogsDAO() {

        catalogsDao = (ICatalogsDAO)TimeTestProxy.factory(catalogsDao);

        final int TYPE_F = 1;

        final int TYPE_Y = 2;

        int page = 1;

        int rowsPerPage = 4;

        assertEquals(rowsPerPage, catalogsDao.findCatalogsByType(TYPE_F, page,

                rowsPerPage).size());

        assertEquals(rowsPerPage, catalogsDao.findCatalogsByType(TYPE_Y, page,

                rowsPerPage).size());

        assertEquals(8, catalogsDao.findCatalogsByType(TYPE_F, 0, -1).size());

        assertEquals(8, catalogsDao.findCatalogsByType(TYPE_Y, 1, -1).size());

    }

}

查看结果得出结论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值