首先,我将从C#回来(回到)Java,如果我的术语或哲学没有完全排列,那么道歉.
以下是背景:我们为网络编写了越来越多的内部支持工具.他们使用HTML5/AJAX /其他流行语作为后端,Java使用后端.这些工具使用轻量级内部框架,因此可以共享管理界面以实现安全性和其他配置.每个工具都是由一位独立的作者编写的,我希望这种趋势能够持续下去,所以我希望未来的作者能够轻松地对我们已经决定用于事物的第三方库保持"标准化".像DI,单元测试,ORM等
我们的包命名目前看起来像这样:
...等等.
所以这是我的问题:为了Maven设置,Eclipse等目的,是否应将每个应用程序(和框架)视为一个单独的项目?
随着时间的推移,我们可能会有很多应用程序出现在这里,所以看起来分离可以使依赖关系更加清晰,让人们更容易地使用单个工具.另一方面,(1)可能在多个项目中"拆分"包结构的更深部分是代码气味,(2)将它们组合在一起会使工具编写者更倾向于使用已经存在的第三方库来实现另一个工具.
FWIW,我最初的本能是将它们分开.
你说什么,Java大师?
我正在研究Web应用程序,以解决一些问题。该应用程序使用Tomcat,Jersey和Guice。用于授权目的的MethodInterceptor中发生了问题之一。这是方法,已裁剪为相关部分:
public Object invoke(MethodInvocation invoc) throws Throwable {
// ...
//Check that the annotation actually exists
if(! invoc.getMethod().getDeclaringClass().isAnnotationPresent(Tool.class))
{
throw new BaseException("...");
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
现在的问题是某些“面向Web”的方法是从父类继承而没有在子类中被覆盖。如果我正确理解getDeclaringClass(),在这种情况下它将返回父类,但是我们真正想要的是子类。一些测试似乎证实了这一点-如果我在子类中重写该方法,一切都很好,但是,如果我不放入重写中,则会引发异常。
因此,给定一个MethodInvocation对象,是否有办法将其追溯到实例化的“实际”类,而不是方法声明所在的类?还是需要其他方法?最坏的情况是,我可以根据需要注释每个方法,而不必注释类。
很抱歉,如果这是一个容易回答的冗长问题-我的Java很生锈。