আপনি উত্তরাধিকারের পরিবর্তে বেস টীকা দিয়ে আপনার টিকাটি টিকিয়ে দিতে পারেন। এটি স্প্রিং ফ্রেমওয়ার্কে ব্যবহৃত হয় ।
একটি উদাহরণ দিতে
@Target(value = {ElementType.ANNOTATION_TYPE})
public @interface Vehicle {
}
@Target(value = {ElementType.TYPE})
@Vehicle
public @interface Car {
}
@Car
class Foo {
}
তারপরে আপনি পরীক্ষা করতে পারেন যে কোনও ক্লাসটি স্প্রিংয়ের টীকাগুলিVehicle
ব্যবহার করে টিকা দেওয়া হয়েছে :
Vehicle vehicleAnnotation = AnnotationUtils.findAnnotation (Foo.class, Vehicle.class);
boolean isAnnotated = vehicleAnnotation != null;
এই পদ্ধতিটি হিসাবে প্রয়োগ করা হয়:
public static <A extends Annotation> A findAnnotation(Class<?> clazz, Class<A> annotationType) {
return findAnnotation(clazz, annotationType, new HashSet<Annotation>());
}
@SuppressWarnings("unchecked")
private static <A extends Annotation> A findAnnotation(Class<?> clazz, Class<A> annotationType, Set<Annotation> visited) {
try {
Annotation[] anns = clazz.getDeclaredAnnotations();
for (Annotation ann : anns) {
if (ann.annotationType() == annotationType) {
return (A) ann;
}
}
for (Annotation ann : anns) {
if (!isInJavaLangAnnotationPackage(ann) && visited.add(ann)) {
A annotation = findAnnotation(ann.annotationType(), annotationType, visited);
if (annotation != null) {
return annotation;
}
}
}
}
catch (Exception ex) {
handleIntrospectionFailure(clazz, ex);
return null;
}
for (Class<?> ifc : clazz.getInterfaces()) {
A annotation = findAnnotation(ifc, annotationType, visited);
if (annotation != null) {
return annotation;
}
}
Class<?> superclass = clazz.getSuperclass();
if (superclass == null || Object.class == superclass) {
return null;
}
return findAnnotation(superclass, annotationType, visited);
}
AnnotationUtils
এছাড়াও পদ্ধতিতে এবং অন্যান্য টীকাযুক্ত উপাদানগুলিতে টীকা অনুসন্ধানের জন্য অতিরিক্ত পদ্ধতি রয়েছে। ব্রিজড ক্লাসটি ব্রিজযুক্ত পদ্ধতি, প্রক্সি এবং অন্যান্য কোণার ক্ষেত্রগুলি বিশেষত বসন্তের মুখোমুখি হয়ে অনুসন্ধান করার জন্য যথেষ্ট শক্তিশালী।