MarmotDataset祥解

来源:互联网 发布:淘宝上咕咚留学怎么样 编辑:程序博客网 时间:2024/06/14 15:35

Marmot是Dorado与Spring、Struts和Hibernate框架集成的中间桥梁,采用Marmot后使得Dorado专注于表现层,把大部分的业务逻辑交由框架进行处理。

使用Marmot,要首先了解Marmot的运行机制。

下面简要介绍Marmot核心MarmotDataset的原理。

MarmotDataset类中有两个最重要的方法:doLoad(boolean createFields, boolean loadData)和invokeProvider(Object provider, DataSet dataSet)。

doLoad(boolean createFields, boolean loadData)方法用来进行字段创建或加载数据。

当createFields为true时进行字段的创建,调用父类的createFieldsFromObjectClazz();方法进行。

当loadData为ture时加载数据。在加载数据时首先判断MarmotDataset的dataProvider属性是否为空,如果为空则抛出异常;否则,通过父类获得pageSize,pageIndex,parameters,properties,并将其设置为MarmotDataset的相关属性。接着就要通过dataProvider属性的值从Spring中加载指定的Bean,调用invokeProvider方法实现数据的加载。

invokeProvider方法如:

protected void invokeProvider(Object provider, DataSet dataSet)
            throws Exception {
        if (DEFAULT_METHOD.equals(method)) {
            ((DataProvider) provider).execute(dataSet);
        }
        else {
            /*
             * 根据指定的方法名去调用DataProvider里的某个方法 完成向RecordSet里装载数据的工作
             */
            Method methodhandle = provider.getClass().getMethod(method,
                    new Class[] { DataSet.class });
            methodhandle.invoke(provider, new Object[] { dataSet });
        }
    }

可以看出采用了反射的方法来实现最终的数据装入的。在这个方法中要注意:该方法默认使用的是execute方法,并认为其是DataProvider的实现类中的方法,所以说,如果你不使用实现类的方式的话,即使用方法指派,那么你定义的类里面最好不要有execute方法,否则将引起错误。虽然你可以明确指定MarmatDataset的method属性为execute,但是这种方法仍然是不提倡的。

在doLoad方法中,装载数据后还要进行一些分页等的设置,这些都是一些初始的数据,其中根据pageSize来判断是否采取了分页设置,否则页面总数就为1 。

 

原创粉丝点击