1.自定义注解
import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;@Target(ElementType.METHOD) //指定可以用在什么地方,默认所有地方 @Retention(RetentionPolicy.RUNTIME ) //指定周期--运行时 public @interface HelloWorld {//定义成员public String name() default "hello"; }
2.编写解析方法
import java.lang.reflect.Method;public class AnnotationParser {public void parse(Object obj,String methodName){Method[] ms=obj.getClass().getMethods();for(Method m:ms){if(m.getName().equals(methodName)){if(m.isAnnotationPresent(HelloWorld.class)){HelloWorld hWorld=m.getAnnotation(HelloWorld.class);//System.out.println(hWorld.name());try{System.out.println("before...");m.invoke(obj, null);System.out.println("after...");}catch (Exception e) {e.printStackTrace();}}}}} }
3.Junit测试
被测试的bean:
public class TestBean {private String name;public TestBean(String name) {this.name = name;}@HelloWorld(name="change")public String getName() {System.out.println("getName executed...");return name;}public void setName(String name) {this.name = name;}public String toString(){return this.name;}}
package junit.test; import org.junit.BeforeClass; import org.junit.Test; import com.persia.annotation.AnnotationParser; import com.persia.annotation.TestBean;public class AnnotationTest {@BeforeClasspublic static void setUpBeforeClass() throws Exception {}@Testpublic void hello(){TestBean tBean=new TestBean("testbean");//System.out.println(tBean);AnnotationParser aParser=new AnnotationParser();aParser.parse(tBean, "getName");} }