在aws lambda中使用java反射是一种不好的做法吗?

时间:2018-04-13 09:54:24

标签: java amazon-web-services reflection aws-lambda

首先,我知道这里有很多已经问过(和一般回答)的问题,关于使用Java Reflection的练习有多好,但我特别想知道它有多糟糕在特定的上下文中是AWS Lambda。

我对Java Reflection的强大感到兴奋和惊讶,我在无服务器架构中更轻松地编写了一些实用程序方法,并且(代码长度)有效地执行了一些任务,特别是当我必须处理Dynamo DB时查询。

我认为AWS Dynamo DB sdk缺乏一些强大的功能,而DynamoDBMapper类远非完美,但它仍然可能是因为我自己缺乏一些知识。

直截了当地思考一句我昨天听过的关于lambda的句子,"你不为代码存储买单#34;我想要根据您的经验,如果我宁愿写出大量的样板代码或使用反射就足够了。

这是一个足够解释性的例子,我用来从映射DynamoDBTable的类中获取字段或方法的真实attributeName:

private static <T extends Bean, A extends Annotation> String getBeanKeyAttributeName(Class<T> tClass,
        Class<A> annClass) {
    Field field = Arrays.stream(tClass.getDeclaredFields()).filter(f -> f.isAnnotationPresent(annClass)).findAny()
            .orElse(null);
    if (field != null) {
        String s = getAttributeName(annClass, field.getAnnotation(annClass));
        if (s != null)
            return s;
        return field.getName();
    }
    Method method = Arrays.stream(tClass.getDeclaredMethods()).filter(f -> f.isAnnotationPresent(annClass))
            .findAny().orElse(null);
    if (method == null)
        throw new IllegalArgumentException();
    String key = method.getName();
    if (key.startsWith("get")) {
        key = key.replaceFirst("get", "");
        key = (key.charAt(0) + "").toLowerCase() + key.substring(1);
    }
    String s = getAttributeName(annClass, method.getAnnotation(annClass));
    if (s != null)
        return s;
    return key;
}

private static <A extends Annotation> String getAttributeName(Class<A> annClass, A annotation) {
    try {
        Method attributeNameMethod = annClass.getMethod("attributeName");
        attributeNameMethod.setAccessible(true);
        String s = (String) attributeNameMethod.invoke(annotation);
        if (!s.isEmpty())
            return s;
    } catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException
            | InvocationTargetException e) {
        e.printStackTrace();
    }
    return null;
}
编辑:在描述我的问题时,我可能不太准确。没有实际问题,我想知道反射的使用是否会无效地减慢我的lambda调用速度,并且如果每个人都做了一些测试并报告了一些结果。

0 个答案:

没有答案