packagecom.liuyu.Annotation;importjava.lang.reflect.Field;importjava.lang.reflect.InvocationTargetException;importjava.lang.reflect.Method;import java.lang.annotation.*;public classAnnotationUtil {public static void getFruitInfo(Class> clazz) throwsIllegalAccessException, IllegalArgumentException, InvocationTargetException{
String strFruitName=" 水果名称:";
String strFruitColor=" 水果颜色:";
String strFruitProvicer="供应商信息:";
Field[] fields=clazz.getDeclaredFields();for(Field field :fields){if(field.isAnnotationPresent(Fruite.class)){
Fruite fruitName= (Fruite) field.getAnnotation(Fruite.class);
strFruitName=strFruitName+fruitName.value();
System.out.println(strFruitName);
}else if(field.isAnnotationPresent(Fruite.class)){
FruitColor fruitColor= (FruitColor) field.getAnnotation(FruitColor.class);
Method md=getGetMethod(clazz, field.getName());
Object s=md.invoke(clazz,fruitColor.fruitColor());
System.out.println(s.toString());
strFruitColor=strFruitColor+fruitColor.fruitColor().toString();
System.out.println(strFruitColor);
}else if(field.isAnnotationPresent(Provider.class)){
Provider fruitProvider= (Provider) field.getAnnotation(Provider.class);
Method mdSet=getSetMethod(clazz, field.getName());
Method mdGet=getGetMethod(clazz, field.getName());
Object sValue;try{
Object g=clazz.newInstance();
mdSet.invoke(g,new Object[]{fruitProvider.id()+fruitProvider.name()+fruitProvider.address()});
sValue= mdGet.invoke(g, newObject[]{});
System.out.println(sValue.toString());
}catch(InstantiationException e) {//TODO Auto-generated catch block
e.printStackTrace();
}
strFruitProvicer=" 供应商编号:"+fruitProvider.id()+" 供应商名称:"+fruitProvider.name()+" 供应商地址:"+fruitProvider.address();
System.out.println(strFruitProvicer);
}
}
}
@SuppressWarnings({"rawtypes", "unchecked"})public staticMethod getGetMethod(Class objectClass, String fieldName) {
StringBuffer sb= newStringBuffer();
sb.append("get");
sb.append(fieldName.substring(0, 1).toUpperCase());
sb.append(fieldName.substring(1));try{returnobjectClass.getMethod(sb.toString());
}catch(Exception e) {
}return null;
}
@SuppressWarnings("rawtypes")public staticMethod getSetMethod( Class objectClass, String fieldName) {try{
Class[] parameterTypes= new Class[1];
Field field=objectClass.getDeclaredField(fieldName);
parameterTypes[0] =field.getType();
StringBuffer sb= newStringBuffer();
sb.append("set");
sb.append(fieldName.substring(0, 1).toUpperCase());
sb.append(fieldName.substring(1));
@SuppressWarnings("unchecked")
Method method=objectClass.getMethod(sb.toString(), parameterTypes);returnmethod;
}catch(Exception e) {
e.printStackTrace();
}return null;
}public static voidinvokeSet(Object o, String fieldName, Object value) {
Method method=getSetMethod(o.getClass(), fieldName);try{
method.invoke(o,newObject[] { value });
}catch(Exception e) {
e.printStackTrace();
}
}/*** 执行get方法
*
*@paramo执行对象
*@paramfieldName属性*/
public staticObject invokeGet(Object o, String fieldName) {
Method method=getGetMethod(o.getClass(), fieldName);try{return method.invoke(o, new Object[0]);
}catch(Exception e) {
e.printStackTrace();
}return null;
}
}