標籤:annotation 註解 自訂註解
@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); } } }}
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。影哥說,這個編碼的變革時代。
著作權聲明:本文為博主原創文章,謝謝參考!有問題的地方,歡迎糾正,一起進步。
Java Annotation詳解+自訂java註解(一)