Annotation: ClassAnnotation.java
package com.pkm.annotation;
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.TYPE) //can use in class only.
public @interface ClassAnnotation {
public enum Priority {
LOW, MEDIUM, HIGH
}
Priority priority() default Priority.HIGH;
String[] tags() default "";
String name() default "Pritom";
String date() default "02/05/2014";
}
Annotation: MethodAnnotation.java
package com.pkm.annotation;
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.METHOD) //can use in method only.
public @interface MethodAnnotation {
public boolean enabled() default false;
}
Annotation: FieldAnnotation.java
package com.pkm.annotation;
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) //can use in field only.
public @interface FieldAnnotation {
public boolean required() default false;
public boolean blank() default true;
public int min() default 0;
public int max() default 255;
}
Example Usage Of Custom Annotation: Example.java
package com.pkm.annotation;
@ClassAnnotation(name = "Pritom Kumar Mondal", priority = ClassAnnotation.Priority.MEDIUM,
tags = {"Pritom", "Kumar", "Mondal"})
public class Example {
@FieldAnnotation(required = true, blank = false, min = 10, max = 15)
String name;
@MethodAnnotation(enabled = true)
void method1() {
if(true) {
System.out.println("True");
} else {
System.out.println("False");
}
}
@MethodAnnotation(enabled = false)
void method2() {
if(true) {
System.out.println("True");
} else {
System.out.println("False");
}
}
@MethodAnnotation()
void method3() {
if(true) {
System.out.println("True");
} else {
System.out.println("False");
}
}
}
Example Runner Class: RunExample.java
package com.pkm.annotation;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class RunExample {
public static void main(String[] args) throws Exception {
RunExample runExample = new RunExample();
Example example = new Example();
example.name = "Pritom Kumar Mondal";
try {
RunExample.validate(example);
System.out.println("\n\nInfo: Validation successful");
} catch (Exception ex) {
System.out.println("\n\nError: " + ex.getMessage());
}
}
public static boolean validate(Object object) throws Exception {
Class obj = object.getClass();
/* Process @ClassAnnotation */
if (obj.isAnnotationPresent(ClassAnnotation.class)) {
Annotation annotation = obj.getAnnotation(ClassAnnotation.class);
ClassAnnotation classAnnotation = (ClassAnnotation) annotation;
System.out.printf("%nPriority :%s", classAnnotation.priority());
System.out.printf("%nCreatedBy :%s", classAnnotation.name());
System.out.printf("%nTags :");
int tagLength = classAnnotation.tags().length;
for (String tag : classAnnotation.tags()) {
if (tagLength > 1) {
System.out.print(tag + " ||| ");
} else {
System.out.print(tag);
}
tagLength--;
}
System.out.printf("%nDate :%s%n%n", classAnnotation.date());
}
/* Process @MethodAnnotation */
for (Method method : obj.getDeclaredMethods()) {
if (method.isAnnotationPresent(MethodAnnotation.class)) {
Annotation annotation = method.getAnnotation(MethodAnnotation.class);
MethodAnnotation methodAnnotation = (MethodAnnotation) annotation;
if(methodAnnotation.enabled()) {
System.out.println(method.getName() +" is enabled");
} else {
System.out.println(method.getName() +" is not enabled");
}
}
}
/* Process @FieldAnnotation */
for (Field field : obj.getDeclaredFields()) {
if (field.isAnnotationPresent(FieldAnnotation.class)) {
Annotation annotation = field.getAnnotation(FieldAnnotation.class);
FieldAnnotation methodAnnotation = (FieldAnnotation) annotation;
field.setAccessible(true);
Object value = field.get(object);
/* Checking: required */
if(methodAnnotation.required()) {
System.out.println(field.getName() +" is required with value: " + value);
if(value == null) {
throw new Exception(field.getName() + " is required");
}
} else {
System.out.println(field.getName() +" is not required");
}
/* Checking: blank */
if(!methodAnnotation.blank()) {
System.out.println(field.getName() +" not blank with value: " + value);
if(value == null || value.toString().trim().length() == 0) {
throw new Exception(field.getName() + " not blank");
}
} else {
System.out.println(field.getName() +" can blank");
}
/* Checking: min */
System.out.println(field.getName() +" min length: " + methodAnnotation.min());
if(value != null && value.toString().trim().length() < methodAnnotation.min()) {
throw new Exception(field.getName() + " must min length: " + methodAnnotation.min());
}
/* Checking: max */
System.out.println(field.getName() +" max length: " + methodAnnotation.max());
if(value != null && value.toString().trim().length() > methodAnnotation.max()) {
throw new Exception(field.getName() + " must max length: " + methodAnnotation.max());
}
}
}
return true;
}
}
Example Output:
Priority :MEDIUM
CreatedBy :Pritom Kumar Mondal
Tags :Pritom ||| Kumar ||| Mondal
Date :02/05/2014
method1 is enabled
method2 is not enabled
method3 is not enabled
name is required with value: Pritom Kumar Mondal
name not blank with value: Pritom Kumar Mondal
name min length: 10
name max length: 15
Error: name must max length: 15