dao设计(五),反射的应用

在我们的dao框架设计中,sqlDao作为cacheDao的一个泛型参数,由于sqlDao和cacheDao实现了相同的接口,意味着他们有相同的方法和相同的参数,这样我们可以在cacheDao方法中利用反射方便的调用sqlDao中的方法,我们只需要获取aop中保存的方法信息然后调用即可。

protected Long[] getIdsFromTarget() {
        Long[] var3;
        try {
            Method method = this.getCurrentMethod().getMethod();
            method = ((CommonObjectDao)this.getTarget()).getClass().getMethod(method.getName(), method.getParameterTypes());
            this.setListOrIds(2);
            List<DomainObject> idObjects = (List)method.invoke(this.getTarget(), this.getCurrentMethodArguments());
            var3 = this.getIdsFromList(idObjects);
        } catch (Exception var7) {
            throw new RuntimeException(this.getCurrentMethodName(), var7);
        } finally {
            this.setListOrIds(1);
        }

        return var3;
    }

通过ParameterizedType的方法getActualTypeArguments,获取对应的实例化泛型参数信息。

public ObjectConfig getObjectConfig() {
        if (this.objectConfig == null) {
            if (this.getTarget() != null) {
                this.objectConfig = ((ObjectConfigInside)this.getTarget()).getObjectConfig();
            } else {
                Type domainType = ((ParameterizedType)this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
                this.objectConfig = new ObjectConfig((Class)domainType);
            }
        }

        return this.objectConfig;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值