注解,还需要自己具体加入到自己的业务逻辑之中
@Retention(RetentionPolicy.RUNTIME) public @interface CarNameTarget { String name() default ""; } @Retention(RetentionPolicy.RUNTIME) public @interface CarSalerTarget { public String salerName(); public int age() default 1; }
public class BnechCar { @CarNameTarget(name = "奔驰") private String name; @CarSalerTarget(salerName = "wpz", age = 22) private String salerInfo; }
/** * 方法1:<T extends Annotation> T getAnnotation(Class<T> annotationClass): 返回改程序元素上存在的、指定类型的注解,如果该类型注解不存在,则返回null。 方法2:Annotation[] getAnnotations():返回该程序元素上存在的所有注解。 方法3:boolean is AnnotationPresent(Class<?extends Annotation> annotationClass):判断该程序元素上是否包含指定类型的注解,存在则返回true,否则返回false. 方法4:Annotation[] getDeclaredAnnotations():返回直接存在于此元素上的所有注释。与此接口中的其他方法不同,该方法将忽略继承的注释。(如果没有注释直接存在于此元素上,则返回长度为零的一个数组。)该方法的调用者可以随意修改返回的数组;这不会对其他调用者返回的数组产生任何影响。 */ public class CarInfoUtil { public static void getFruitInfo(Class<?> clazz) { Field[] fields = clazz.getDeclaredFields(); for (Field field : fields) { System.out.println(field.getName()); if (field.isAnnotationPresent(CarNameTarget.class)) { CarNameTarget name = (CarNameTarget) field.getAnnotation(CarNameTarget.class); String carColour = "汽车的中文名:" + name.name(); System.out.println(carColour); } else if (field.isAnnotationPresent(CarSalerTarget.class)) { CarSalerTarget saler = (CarSalerTarget) field.getAnnotation(CarSalerTarget.class); String salerInfo = " 销售员姓名:" + saler.salerName() + " 销售员年龄:" + saler.age(); System.out.println(salerInfo); } } } public static void main(String[] args) { CarInfoUtil.getFruitInfo(BnechCar.class); } }
然后实例化class 将注解的配置相应的属性上就行了