简单利用java反射 理解注解的作用
程序员文章站
2022-07-08 10:25:16
...
在新版框架中 都加入了 注解大大减少了xml配置的臃肿。
新建注解
@Retention(RetentionPolicy.RUNTIME)
public @interface NewHelloWord {
public String value() default "hello";
}
通过反射 实现方法调用前后 注解的功能。
public class Parser {
public void parse(Object obj, String methodName) {
Method[] ms = obj.getClass().getMethods();
for (Method m : ms) {
if (m.getName().equals(methodName)) {
该类是否使用了注解
if (m.isAnnotationPresent(NewHelloWord.class)) {
获取注解
NewHelloWord hw = m.getAnnotation(NewHelloWord.class);
//System.out.println(hw.value());
try {
System.out.println(hw.value() + " before...");
m.invoke(obj, new Object[] {});
System.out.println(hw.value() + " after...");
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
}
测试bean 使用了注解
@NewHelloWord
public class TestBean {
public TestBean(String name) {
this.name = name;
}
@NewHelloWord("你好")
private String name;
@Override
@NewHelloWord
public String toString() {
System.out.println(this.name);
return this.name;
}
}
测试
public class MainTest {
/**
* @param args
*/
public static void main(String[] args) {
TestBean tb = new TestBean("abcd");
Parser p = new Parser();
p.parse(tb, "toString");
}
}
最后输出
hello before...
abcd
hello after...