package scan;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;
public class TestCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
String property = context.getEnvironment().getProperty("os.name");
System.out.println(property);
return property.contains("Windows");
}
}
package scan;
import org.springframework.context.annotation.Conditional;
import org.springframework.stereotype.Service;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
@Conditional(value = {TestCondition.class})
@Service("eee")
public class InvokeAnnotation {
public static void main(String[] args) {
try {
System.out.println("-------------------------");
Method[] methods = InvokeAnnotation.class.getMethods();
for (Method method : methods) System.out.println(method.getName());
System.out.println("-------------------------");
Annotation[] annotations = InvokeAnnotation.class.getAnnotations();
for (Annotation annotation : annotations) System.out.println(annotation.toString());
System.out.println("-------------------------");
Conditional annotation = InvokeAnnotation.class.getAnnotation(Conditional.class);
Method method = annotation.annotationType().getDeclaredMethod("value");
Object obj = method.invoke(annotation);
System.out.println(obj.getClass());
System.out.println(obj instanceof Class[]);
Class[] classes = (Class[]) obj;
for (Class clazz : classes) System.out.println(clazz.getSimpleName());
System.out.println("-------------------------");
Service serviceAnnotation = InvokeAnnotation.class.getAnnotation(Service.class);
method = serviceAnnotation.annotationType().getDeclaredMethod("value");
obj = method.invoke(serviceAnnotation);
System.out.println(obj instanceof String);
System.out.println(obj);
System.out.println("-------------------------");
} catch (Exception e) {
e.printStackTrace();
}
}
}
输出:
-------------------------
main
wait
wait
wait
equals
toString
hashCode
getClass
notify
notifyAll
-------------------------
@org.springframework.context.annotation.Conditional(value=[class scan.TestCondition])
@org.springframework.stereotype.Service(value=eee)
-------------------------
class [Ljava.lang.Class;
true
TestCondition
-------------------------
true
eee
-------------------------