您的位置:首页 > 编程语言 > Java开发

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

2015-08-07 21:52 537 查看


上述思维导图的下载地址为:http://download.csdn.net/detail/emilyrr/8975487

注解的注解:



经过上面的学习,我们可以通过元注解来实现一个自定义的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);
}


下面我们来看测试结果:



通过测试类可以看出,我们并没有直接new SayHello对象,也没有调用它的 say( )方法,而是通过注解的解析框架用反射机制激活的say。影哥说,这个编码的变革时代。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: