How to create a Custom Annotation in Java
Points To Remember
- An annotation can be used as a replacement of interfaces.
- You can make both empty/marker annotations and annotations with methods.
- You can define the retention policy for the annotation and where the annotation can be used.
Program : Create A Custom Annotation
The following program creates a custom empty annotation.import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.lang.annotation.ElementType; @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface Table { public String name() default "table"; }
The following program creates a custom annotation with methods defined.
import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface Column { public String name() default ""; }In the above example the annotation @Column can be applied only to the fields of a class and not at class level or method level.
@Table(name="user_table") public class User { @Column(name="ekiras") private String username;
public String password; }
The above code represents how we can use the annotations @Table and @Column to annotate in any pojo class like the class User mentioned above.
public class RunTest { public static void main(String args[]){ test(); } public static void test(){ Table table = User.class.getAnnotation(Table.class); if(table!=null){ System.out.println("Class is annotated with @Table and name="+table.name()); Field[] fields = User.class.getFields(); for(Field field : fields){ Column column = field.getAnnotation(Column.class); if(column!=null) System.out.println("Field "+field.getName() +" annotated with @Column name="+column.name()); else { System.out.println("Field "+field.getName() +" is not annotated with @Column"); } } } } }
Class is annotated with @Table and name=user_table Field username annotated with @Column name=ekiras Field password is not annotated with @Column
No comments: