JPA相关--Annotation
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 { @BeforeClass public static void setUpBeforeClass() throws Exception { } @Test public void hello(){ TestBean tBean=new TestBean("testbean"); //System.out.println(tBean); AnnotationParser aParser=new AnnotationParser(); aParser.parse(tBean, "getName"); } }