我想知道是否可以调试/查看控件的流程,以便为注释执行哪些代码。我想要了解的内容如下:
(不是特定于Spring Framework注释,可以是任何其他注释)
考虑代码段:
@Autowired(required=true)
private JPADBAccess jPADBAccess;
现在我想了解针对注释执行的操作/代码是什么?有可能看到。
我很难理解简单的注释是如何完成工作的;应该有一些代码可以实际做一些工作;注释就像接口(@interface ..),但实际工作的代码在哪里?
答案 0 :(得分:1)
如果您正在处理开源库,您可以查看源代码并搜索注释的使用位置。
如果您想查看注释的实际使用方式,调试也可能有效。
对于运行时注释,您可以尝试调试应用程序并在类getAnnotation
,getDeclaredAnnotations
等类方法上设置断点。如果您的调试器支持它(就像Eclipse中那样),那么你也可以使用条件断点来例如如果getAnnotation
的参数具有正确的类型,则仅在断点处停止。
如果在编译时处理注释,这将无法工作。在这种情况下,您可以通过debugging the annotation processor尝试相同的方法,并在加载注释的方法中设置断点。
答案 1 :(得分:0)
注释的“范围”基于其位置。例如,此注释会影响整个类:
@SuppressWarnings("unused")
public class Foo{
private Object anUnusedField;
private Object anotherUnusedField;
private void anUnusedMethod(Object unusedParameter){}
/*
* Here, the compiler will suppress all "the private field/method
* Foo.[insert name here] is unused" warnings. It will warn about
* the unusedParameter of anUnusedMethod
*/
}
这个影响特定领域:
public class Foo{
private Object anUnusedField;
@SuppressWarnings("unused") private Object anotherUnusedField;
private void anUnusedMethod(Object unusedParameter){}
/*
* Here, the compiler won't tell that anotherUnusedField is not used.
* But it'll tell that anUnusedField isn't used, anUnusedMethod isn't
* called and unusedParameter isn't used in anUnusedMethod
*/
}
这个影响特定方法:
public class DifferentFoo{
@SuppressWarnings("unused") private void anUnusedMethod(){}
private void anotherUnusedMethod(){}
/*
* Here, the compiler will only tell that anotherUnusedMethod isn't
* called
*/
}
另请注意,您不能对所有内容使用所有注释,例如以下内容无效:
@Override protected Object someFieldFromTheSuperclass;
// Doesn't compile. Fields can't be overriden like methods