自定义MyAnnotationTest
package com.zhanghaobo.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * @author *自定义注解(只能用于方法上) */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface MyAnnotationTest { MyName name(); } enum MyName{ HELLO,WORLD,WELCOM,HELLOWORLD } 测试类 Test
1 package com.zhanghaobo.annotation; 2 3 public class Test { 4 @MyAnnotationTest(name=MyName.HELLOWORLD) 5 public void doSomething(){ 6 System.out.println("注解修饰调用"); 7 } 8 public void doOtherthing(){ 9 System.out.println("没有被修饰的方法"); 10 } 11 @MyAnnotationTest(name=MyName.WELCOM) 12 public void doSome(String... name){ 13 System.out.println("带参数的修饰调用"+name); 14 } 15 }
调用类
1 package com.zhanghaobo.annotation; 2 3 import java.lang.reflect.Method; 4 5 /** 6 * @author Administrator 7 *通过反射调用Test中的方法,并获取注解方法的类型 8 */ 9 public class MyRefelctionTest { 10 public static void main(String[] args) throws Exception { 11 Class<?> clazz=null; 12 try{ 13 clazz=Class.forName("com.zhanghaobo.annotation.Test"); 14 }catch(Exception e){ 15 e.printStackTrace(); 16 } 17 Method[] method=clazz.getMethods(); 18 for(Method me:method){ 19 //如果是带自定义注解的执行 20 if(me.isAnnotationPresent(MyAnnotationTest.class)){ 21 System.out.println(me.getAnnotation(MyAnnotationTest.class)); 22 //如果是无返回的,并且不带可变参数的执行 23 if(me.getReturnType()==Void.TYPE&&!me.isVarArgs()){ 24 me.invoke(new Test()); 25 } 26 } 27 } 28 } 29 30 }
执行结果:
@com.zhanghaobo.annotation.MyAnnotationTest(name=HELLOWORLD)
注解修饰调用
@com.zhanghaobo.annotation.MyAnnotationTest(name=WELCOM)
时间: 2024-10-23 01:54:16