小编Ele*_*aar的帖子

Maven多模块:在一个模块中聚合常见的依赖关系?

我没有找到任何东西就搜索过这样的问题,所以我走了.

我有一个多模块maven项目.多个模块都继承相同的父模块,其中定义了公共依赖项.其中,有一个我自己的模块,一个'通用'模块,其中实现了一些常用功能.

我的问题是:对于公共依赖项,什么是更好的做法:在父级中明确地定义它们,就像我现在一样?或者在"公共"模块中定义它们,其他模块引用它们,然后依赖于传递性(如公共依赖项的单入口点)?

dependencies maven multi-module

11
推荐指数
1
解决办法
1万
查看次数

Java:如何使用反射检查方法是否被覆盖

我需要做一些处理来确定JSR-330带注释类的依赖关系,使用反射.

我完全了解所有符合JSR-330标准的IoC容器,如Spring,Guice或PicoContainer.但是,我需要的不是解决和注入依赖关系,而是要识别它们.

这基本上意味着我需要实现JSR-330实现,至少在涉及反射类"解析"时.

JSR-330规范的一部分我觉得实现起来有点麻烦:

使用@Inject注释的方法将覆盖使用@Inject注释的另一个方法,每个实例的每个注入请求只会注入一次.不会注入没有@Inject批注的方法,该方法将覆盖使用@Inject注释的方法.

这意味着子类可以重新定义其基类的自动装配合同,以及挂钩注入流(通过多态).

我的问题出现了:给定一个类层次结构,是否有一种简单的方法可以检查层次结构中某个部分的方法是否在层次结构的下方被覆盖?

在我的例子中,我最简单的方法是从层次结构的叶子中递归:

private List<Method> getInjectableMethods(final Class<?> clazz) {
    // recursive stop condition
    if(clazz == null) {
        return emptyList();
    }

    // recursively get injectable methods from superclass
    final List<Method> allInjectableMethods = newLinkedList(getInjectableMethods(clazz.getSuperclass()));
    final List<Method> injectableMethods = newArrayList();

    // any overridden method will be present in the final list only if it is injectable in clazz
    for (final Method method : clazz.getDeclaredMethods()) {
        removeIf(allInjectableMethods, Methods.Predicates.overriddenBy(method));
        if (isInjectable(method)) {
            injectableMethods.add(method);
        }
    }
    allInjectableMethods.addAll(injectableMethods);

    return allInjectableMethods;
} …
Run Code Online (Sandbox Code Playgroud)

java reflection overriding jsr330

5
推荐指数
1
解决办法
1970
查看次数