What is Annotation?
Annotation is a new feature introduced by J2SE 5 that allows programmers
to embed additional information called metadata into a Java source
file.
Annotations do not alter the execution of a program but the information
embedded using annotations can be used by various tools during
development and deployment.
How to create Annotation:
Creating an annotation is similar to creating an interface. But the annotation declaration is preceded by an
@
symbol. The annotation declaration itself is annotated
with the @Retention
annotation. The @Retention
annotation is used to specify the retention policy,
which can be SOURCE
, CLASS
, or RUNTIME
.RetentionPolicy.SOURCE
retains an annotation only in the source file and discards it during compilation.RetentionPolicy.CLASS
stores the annotation in the .class file but does not make it available during runtime.RetentionPolicy.RUNTIME
stores the annotation in the .class file and also makes it available during runtime.
Ex:
// Specifying runtime retention policy
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation
{
String author(); // Annotation member
String date(); // Annotation member
}
An annotation cannot have the extends
clause. However, annotations implicitly
extend the Annotation
interface. The body of an annotation consists
of method declarations without body. These methods work like fields.
In the above example, I have created two members, author and date to
represent information about the creator, and date of writing of the
class and method.
Once an annotation is created, it can be applied to classes, methods,
fields, parameters, enums, and so on. While applying an annotation to a
declaration,
you must provide values for its members as follows:
Ex:
// Applying annotation to the class
@MyAnnotation(author="Azim",date="22/10/2011,23/10/2011")
public class TestAnnotation
{
// Applying annotation to the method
@MyAnnotation(author="Azim",date="22/10/2011")
public static void testMethod()
{
System.out.println("Welcome to Java");
System.out.println("This is an example of Annotations");
}
public static void main(String args[])
{
testMethod();
showAnnotations();
}
Annotations can be queried at runtime using Reflection as follows:
Ex:
public static void showAnnotations()
// Function to show annotation information
{
TestAnnotation test=new TestAnnotation(); // Instantiating Test class
try
{
Class c=test.getClass(); // Getting Class reference
Method m=c.getMethod("testMethod"); // Getting Method reference
// Getting Class annotation
MyAnnotation annotation1=
(MyAnnotation)c.getAnnotation(MyAnnotation.class);
// Getting Method annotation
MyAnnotation annotation2=m.getAnnotation(MyAnnotation.class);
// Displaying annotation information
System.out.println("Author of the class: "+annotation1.author());
// Displaying annotation information
System.out.println("Date of Writing the class: "+annotation1.date());
// Displaying annotation information
System.out.println("Author of the method: "+annotation2.author());
// Displaying annotation information
System.out.println("Date of Writing the method: "+annotation2.date());
}
catch(NoSuchMethodException ex)
{
System.out.println("Invalid Method..."+ex.getMessage());
}
}
No comments:
Post a Comment