Java Annotation详解+自定义java注解(一)

时间:2021-10-14 20:15:47
  • Java Annotation详解+自定义java注解(一)
    上述思维导图的下载地址为:http://download.csdn.net/detail/emilyrr/8975487
  • 注解的注解:
    Java Annotation详解+自定义java注解(一)
  • 经过上面的学习,我们可以通过元注解来实现一个自定义的HelloWorld注解

  • 第一步:定义一个HelloWorld注解

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)//定义了注解的作用位置:在方法上
@Inherited//允许子类继承父类中的注解
public @interface HelloWorld {
public String name()default "";
}
  • 新建一个注解解析类,底层通过反射机制实现
public class ParseAnnotation {
public void parseMethod(Class clazz) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException{
Object obj = clazz.newInstance();
Method[] methods=clazz.getDeclaredMethods();

for(Method m:methods){
HelloWorld hello=m.getAnnotation(HelloWorld.class);
String name="";
if(hello!=null){
name=hello.name();
m.invoke(obj, name);
}
}

}
}
  • 新建一个普通类,调用HelloWorld注解
public class SayHello {

@HelloWorld(name="Yc")
public void say(String name){
if(name == null || name.equals("")){
System.out.println("hello world");
}else{
System.out.println( "hello world\t"+name);
}
}
}
  • 使用Junit测试(新建一个class,在main方法中测试也可以)
 public void testApp() throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException
{
ParseAnnotation pa=new ParseAnnotation();
pa.parseMethod(SayHello.class);
}
  • 下面我们来看测试结果:
    Java Annotation详解+自定义java注解(一)

通过测试类可以看出,我们并没有直接new SayHello对象,也没有调用它的 say( )方法,而是通过注解的解析框架用反射机制激活的say。影哥说,这个编码的变革时代。