This is a decision chart that I found on the internet, which shows how response codes are identified. Will be helpful if someone is trying to triage response codes issues.
Please Download this image and Zoom to see the details.
Standard Annotation : Are applied to regular java classes, methods and statementsMeta Annotations: Applied to annotation definition to describe the behavior of the annotation being declared and how it can be used.
These are annotations used when defining an annotation@Retention : When are the annotations loaded into the JVM
@Target : Elements of the Java class to which annotation is applicable
If an Inherited meta-annotation is pre sent on an annotation type declaration, and the user queries the annotation type on a class declaration, and the class declaration has no annotation for this type, then the class's superclass will automatically be queried for the annotation type
This process will be repeated until an annotation for this type is found, or the top of the class hierarchy (Object) is reached. If no superclass has an annotation for this type, then the query will indicate that the class in question has no such annotation.@Inherited Example:
@Target(ElementType.METHOD, ElementType.CLASS) @Retention(RetentionPolicy.RUNTIME) @Inherited public @interface changelog { String author() default "author" ; // Annotation member String date(); // Annotation member } @changelog(author="vidhya", date="30/11/2012") public class superclass { } public class subclass extends superclass { }
When subclass is queried for ChangeLog annotation, it will be successful as the changelog annotation is @inherited.@Documented: If a type declaration is annotated with Documented, its annotations become part of the public API of the annotated elements.
Each annotation must be defined by an annotation interface. The methods of the interface correspond to the elements of the annotation.
@Target(ElementType.METHOD, ElementType.CLASS) @Retention(RetentionPolicy.RUNTIME) Public @interface ChangeLog { String author(); // Annotation member String date(); // Annotation member }
3 Types of annotation Definition
1. Marker - No Parameters, just used to denote a type. @Test in Junit 1.4 onwards
2. Single Value Annotation - This contains just one value @name("Single Value")
3. Multiple parameter annotation - has many parameters @user(id="1234", name="user1")
//Defined Annotation
@ChangeLog(author="user1", date="10/10/2012")
public class MyTest { @ChangeLog(author="user2", date="20/08/2012") @TestCase public void test1() } // The Annotation Reader import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; public class AnnotationTest { public static void main( String[] args ) throws Exception { //access the class annotation Class clazz = MyTest.class; System.out.println( clazz.getAnnotation(ChangeLog.class ) ); //access the method annotation Method method = clazz.getMethod( "test1" ); ChangeLog changelog = (ChangeLog) method.getAnnotation(ChangeLog.class); System.out.println("--- Changelog Author:"+changelog.author()"); } }