/**
* Copyright 2011 Marin Solutions
*/
package dependency_injection_with_annotations;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import dependency_injection_with_annotations.annotations.MyAutoWire;
import dependency_injection_with_annotations.annotations.MyComponent;
/**
* A class that tests for annotations at class (or type) level, method level and
* field level. This mimics the kind of annotation checking done is Spring 3
*
* @author Roger
*
*/
public class AnnotationChecker {
private final Class<?> instance;
public AnnotationChecker(Class<?> instance) {
this.instance = instance;
}
public boolean isMyComponent() {
return instance.isAnnotationPresent(MyComponent.class);
}
private boolean isNotNull(Object obj) {
return obj != null;
}
public List<Method> getAutoWireMethods() {
List<Method> methodList = new ArrayList<Method>();
Method[] methods = instance.getDeclaredMethods();
for (Method method : methods) {
if (isNotNull(method.getAnnotation(MyAutoWire.class))) {
methodList.add(method);
}
}
return methodList;
}
public List<Field> getAutoWireFields() {
List<Field> fieldList = new ArrayList<Field>();
Field[] fields = instance.getDeclaredFields();
for (Field field : fields) {
if (isNotNull(field.getAnnotation(MyAutoWire.class))) {
fieldList.add(field);
}
}
return fieldList;
}
}