一、注解在类上

  1. package annotation5;
  2. import annotation4.*;
  3. public class ReflectAnnotationTest {
  4. public static void main(String[] args) throws Exception {
  5. Class c =Class.forName("annotation4.AnnotationTest01");
  6. //判断类上面是否有@annotation4.MyAnnotation
  7. //System.out.println(c.isAnnotationPresent(MyAnnotation.class));
  8. if (c.isAnnotationPresent(MyAnnotation.class)){
  9. MyAnnotation myAnnotation = (MyAnnotation) c.getAnnotation(MyAnnotation.class);
  10. //获取注解对象的属性
  11. String value = myAnnotation.value();
  12. System.out.println(value);
  13. }
  14. //判断String类上面是否存在注解
  15. Class StringClass = Class.forName("java.lang.String");
  16. System.out.println(StringClass.isAnnotationPresent(MyAnnotation.class));
  17. }
  18. }

二、注解在类方法中

  1. package annotation6;
  2. import java.lang.reflect.Method;
  3. public class MyAnnotationTest {
  4. @MyAnnotation(username = "admin",password = "123")
  5. public void doSome(){
  6. }
  7. public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException {
  8. Class c = Class.forName("annotation6.MyAnnotationTest");
  9. //获取doSome方法
  10. Method doSomeMethord =c.getDeclaredMethod("doSome");
  11. if (doSomeMethord.isAnnotationPresent(MyAnnotation.class)){
  12. MyAnnotation myAnnotation = doSomeMethord.getAnnotation(MyAnnotation.class);
  13. System.out.println(myAnnotation.username());
  14. System.out.println(myAnnotation.password());
  15. }
  16. }
  17. }

三、注解的应用

  1. package annotation7;
  2. import java.lang.reflect.Field;
  3. public class Test {
  4. public static void main(String[] args) throws Exception{
  5. //获取类
  6. Class userClass = Class.forName("annotation7.User");
  7. if (userClass.isAnnotationPresent(Id.class)){
  8. Field[] fields = userClass.getDeclaredFields();
  9. boolean isOk = false;
  10. for (Field field : fields){
  11. if ("id".equals(field.getName()) && "int".equals(field.getType().getSimpleName())){
  12. isOk = true;
  13. break;
  14. }
  15. }
  16. //判断是否合法
  17. if (!isOk){
  18. throw new HasNotIdPropertyException("被Id注解标注的类中必须要有一个int类型的id属性");
  19. }
  20. }
  21. }
  22. }
  1. package annotation7;
  2. @Id
  3. public class User {
  4. String name;
  5. }
  1. package annotation7;
  2. import java.lang.annotation.ElementType;
  3. import java.lang.annotation.Retention;
  4. import java.lang.annotation.RetentionPolicy;
  5. import java.lang.annotation.Target;
  6. @Target(ElementType.TYPE)
  7. @Retention(RetentionPolicy.RUNTIME)
  8. public @interface Id {
  9. }
  1. package annotation7;
  2. public class HasNotIdPropertyException extends RuntimeException {
  3. public HasNotIdPropertyException() {
  4. }
  5. public HasNotIdPropertyException(String message) {
  6. super(message);
  7. }
  8. }