java反射和注解

目录

  • 反射
  • 注解
    • 元属性
    • 自定义注解
    • 使用案例

反射

Class<?> aClass = Class.forName("reflect.Student");
Constructor<?> constructor = aClass.getConstructor();//构造函数,用于创建对象
Object obj = constructor.newInstance(); //创建对象,用于执行函数

Method[] methods = aClass.getMethods();//获取方法
for (Method method : methods) {
    System.out.println(method);
}
Method out = aClass.getMethod("out");//获取指定方法
out.invoke(obj);//执行方法

Field[] fields = aClass.getDeclaredFields();//获取所有属性(包括private)
for (Field field : fields) {
    System.out.println(field.getName());
}
fields[0].setAccessible(true); //给属性解锁  fields[0]  private name;
fields[0].set(obj, "小明"); //给属性赋值
System.out.println(obj);

//获取注解
Class<BookStore> bookStoreClass = BookStore.class;
Method buyBook = bookStoreClass.getMethod("buyBook");
//判断是否有注解,如果用buyBook则获取的是类上的注解
if (bookStoreClass.isAnnotationPresent(Book.class)) {
    Book annotation = bookStoreClass.getAnnotation(Book.class);
    //输出注解
    System.out.println(annotation.value());
    System.out.println(Arrays.toString(annotation.authors()));
}

注解

元属性

@Target
ElemenetType:
TYPE:用在类,接口上
FIELD:用在成员变量上
METHOD用在方法上
PARAMETER:用在参数上
CONSTRUCTOR:用在构造方法上
LOCAL_VARIABLE:用在局部变量上

@Retention
RetentionPolicy:
SOURCE:注解只存在于Java源代码中,编译生成的字节码文件中就不存在了。
CLASS:注解存在于Java源代码、编译以后的字节码文件中,运行的时候内存中没有,默认值。
RUNTIME:注解存在于Java源代码中、编译以后的字节码文件中、运行时内存中,程序可以通过反射获取该注解。

自定义注解

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Book {
    //  当注解中只有一个属性且名称是value,在使用注解时给value属性赋值可以直接给属性值

    //书名
    String value();

    //价格
    double price() default 100;

    //作者
    String[] authors();
}

使用案例

@Book(value = "红楼梦",authors = "曹雪芹",price = 998)
public class BookStore {

    @Book(value = "西游记",authors = {"吴承恩"})
    public void buyBook(){

    }
}

原文地址:https://www.cnblogs.com/birdofparadise/p/9769293.html

时间: 2024-08-29 17:39:49

java反射和注解的相关文章

JAVA反射与注解实例

1    JAVA反射机制 JAVA反射机制是在运行状况中,号码大全关于恣意一个类,关键词挖掘工具都能够晓得这个类的一切特点和办法:关于恣意一个目标,都能够调用它的恣意一个办法和特点:这种动态获取的信息以及动态调用目标的办法的功能称为java言语的反射机制.或许说,JAVA反射机制指的是咱们能够于运行时加载.探知.运用编译时间完全不知道的classes.换句话说,Java程序能够加载一个运行时才得知称号的class,得悉其完好结构(但不包括methods界说),并生成其目标实体.或对其field

java反射获取注解并拼接sql语句

先建两个注解 分别为 Table 和 Column package com.hk.test; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target({ElementType.TYPE}) @Retention(Ret

java反射与注解结合使用(根据传入对象输出查询sql)

我们在项目开发中有很多地方使用到了注解,关于注解的定义与创建小伙伴可以参考我的文章<java注解>.有任何问题的小伙伴们可以在评论区指出哦,欢迎各位大佬指出问题. 今天我要说的是使用注解与反射结合使用,来使我们代码根据优雅,更加高大上(咳,装逼神器啊). 注解使用@interface 来定义,辣么我们自定义的注解,该使用获取到并且指明该注解的作用呢?java提供了反射机制,通过类的类类型我们可以根据自己需要老操作该类.有管反射的知识,可以参考我的上两章博客.好了,废话不多说,我们上代码: 需求

[记录] java反射+注解

框架开发之Java注解的妙用 JAVA反射与注解 Java基础 :反射.注解.代理.线程池.依赖的学习和理解 Java反射与注解 原文地址:https://www.cnblogs.com/zad27/p/12121589.html

获取Java类中注解的详细信息

前言:这篇博客主要是为了后续的获取SpringMVC中的全部请求URL做的准备. public class AnnotationHelper { private static final AnnotationHelper helper = new AnnotationHelper(); protected AnnotationHelper() { } public static AnnotationHelper getInstance() { return helper; } /** * 得到类

java反射之获取枚举对象

项目中导入大量枚举对象,用来定义常量.随着带来一个问题,就是每个枚举类都需要通过key来获取对应枚举的需求. 1 public enum ExamType { 2 CRAFT(1, "草稿"), 3 PASSING(2, "待审核"); 4 private int value; 5 private String typeName; 6 7 ExamType(int value, String typeName) { 8 this.value = value; 9 t

Java高级之注解、反射

Java的注解.反射等机制的产生,让动态代理成为可能,一般通过全限定名+类名,找到类,可以invoke它的构造方法以及其他方法,可以获取它的参数(Field)名称和值. 注解一般用在代码的注释上.代码审查上(有没有按标准写,比如inspect).代码注入(hook,asbectj),需要考虑的是,在何时注入(编译期还运行期) 反射一般用在动态将json和Object互相转化,执行相关底层代码,比如设置某个类的Accessible为false,防止别人hook修改 例:阿里的FastJson解析:

Java自定义注解和运行时靠反射获取注解

Java注解是附加在代码中的一些元信息,用于一些工具在编译.运行时进行解析和使用,起到说明.配置的功能.注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用.包含在 java.lang.annotation 包中. 1.元注解 元注解是指注解的注解.包括  @Retention @Target @Document @Inherited四种. 1.1.@Retention: 定义注解的保留策略 @Retention(RetentionPolicy.SOURCE)   //注解仅存在于源码中,在c

Java反射学习总结终(使用反射和注解模拟JUnit单元测试框架)

本文是Java反射学习总结系列的最后一篇了,这里贴出之前文章的链接,有兴趣的可以打开看看. http://blog.csdn.net/a396901990/article/category/2302221 本文介绍了如何利用反射和注解去简单的模拟JUnit4单元测试框架,之所以选择JUnit4是因为4.0以后最大的改进就是使用了注解.需要注意的是这里并不是完全的模拟,只是简单实现了一下Runner类和JUnit注解相关的工作流程.所以本文的主要目的是介绍反射和注解的使用.废话不多说,直接进入正文