反射注解,反射注解一般是用于编写一个框架,此框架可以反射方法上的注解,获取注解上的参数。下面是两个例子,一个例子是通过注解给一个方法注入相关参数,另一个是通过注解给一个方法注入一个对象。
给一个方法注入参数并获取这些参数的方法。
@Retention(RetentionPolicy.RUNTIME) //元注解
public @interface DBinfo {
String url() default "jdbc:mysql://localhost:3306/jdbc";
String user() default "root";
String password() default "root";
}
public class JDBCUtils {//向方法注解相关参数
@DBinfo(url="jdbc:mysql://localhost:3306/test", user="root", password="1234")
public static Connection getConnection(String url, String user, String password){
System.out.println("url:"+url);
System.out.println("user"+user);
System.out.println("password:"+password);
return null;
}
}
//反射注解,获取注解的相关参数
public class ReflectAnnotionDemo {
//一个框架示例,用于反射注解
public static void main(String[] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException{
//1.获取方法所在的class文件
Class clazz = JDBCUtils.class;
//2.获取对应的方法
Method method = clazz.getMethod("getConnection", String.class, String.class, String.class);
//3.获取method方法上指定的注解
DBinfo di = method.getAnnotation(DBinfo.class);
//4.获取注解中指定的参数
String url = di.url();
String user = di.user();
String password = di.password();
//执行指定方法
method.invoke(null, url, user, password);
}
}
输出结果:
url:jdbc:mysql://localhost:3306/test
userroot
password:1234