Java反射+注解案例
2024-08-28 21:36:30
注解类代码,注解的属性可以有多个:
package reflect; import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; /***
* java注解默认只会保留在字节码文件里面
* 运行期间注解会被抹掉
* 可以用@Retention来指定注解的保留时间
* 注:
* @Retention是元注解,即用来解释其他注解的注解
* Retentionpolicy.RUNTIME是表示注解保留到运行时。
* @author zlq1252
*
*/
@Retention(RetentionPolicy.RUNTIME)
public @interface Test {
/*
* 注解的属性
*
*注解可以有多个属性。
*如果属性名为value时,可以不制定属性名(只有一个属性时)
*/
public String value();
}
方法类,在方法类的方法上加上注解代码如下:
package reflect; public class C { public void f1() {
// TODO Auto-generated method stub
System.out.println("C'S f1");
}
@Test(value="淡淡")
public void hello() {
// TODO Auto-generated method stub
System.out.println("C'S hello");
}
@Test(value="洋洋")
public void bala() {
// TODO Auto-generated method stub
System.out.println("C'S bala");
}
}
反射类代码,通过反射类获得所有具有代码注解的方法并执行,同时可以过的注解的属性:
package reflect; import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Scanner; public class TestCase3 { public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
String className = sc.nextLine();
Class clazz = Class.forName(className);
Object obj = clazz.newInstance();
Method[] methods = clazz.getDeclaredMethods();
for(Method mh:methods){
//获得加在方法前面的@Test
Test test = mh.getDeclaredAnnotation(Test.class);
System.out.println("@Test:"+test);
//执行带有注解的方法
if(test!=null){
mh.invoke(obj);
//读取@Test的属性值
String v1 = test.value();
System.out.println("@Test的属性值:"+v1);
}
}
} }
最新文章
- IT软件开发常用英语词汇
- linux网络编程-(socket套接字编程UDP传输)
- java、java -version 可以javac没有内部命令的问题
- 非web项目中使用XDT的实例(续)
- 怎么解决div覆盖内容却没覆盖的问题?
- swift基本语法
- Node.js : 我只需要一个店小二
- Java 的swing.GroupLayout布局管理器的使用方法和实例(转)
- STL sort函数的用法
- ECMAScript简介以及es6新增语法
- 10个用于处理日期和时间的 Python 库
- Codefoces909E Coprocessor(拓扑排序)
- CSS 基础:CSS 工作原理(2)<;思维导图>;
- SQL 清理缓存 更新无效
- jvm系列五、jvm垃圾回收机制、jvm各种参数及调优
- 贪吃蛇Controller Java实现(二)
- 微信隐藏的webJS Api汇总
- 解决Resource doesn&#39;t have a corresponding Go package.问题
- T分布(T-Distribution)
- mnesia怎样改动表结构