java自定义 注解 annotation、标签库tag、监听listener、junit简单测试代码
完整项目和相关文档教程请免费下载: http://download.csdn.net/detail/liangrui1988/6971229
package org.rui.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
*
*
1.2、@Target:定义注解的作用目标
@Target 用于描述注解的使用范围(即:被描述的注解可以用在什么地方),其取值有:
取值 描述
CONSTRUCTOR 用于描述构造器。
FIELD 用于描述域。
LOCAL_VARIABLE 用于描述局部变量。
METHOD 用于描述方法。
PACKAGE 用于描述包。
PARAMETER 用于描述参数。
TYPE 用于描述类或接口(甚至 enum )。
------------------------------------------------------------------------
1.1、@Retention: 定义注解的保留策略
@Retention(RetentionPolicy.SOURCE) //注解仅存在于源码中,在class字节码文件中不包含
@Retention(RetentionPolicy.CLASS) // 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得,
@Retention(RetentionPolicy.RUNTIME) // 注解会在class字节码文件中存在,在运行时可以通过反射获取到
@Retention 用于描述注解的生命周期(即:被描述的注解在什么范围内有效),其取值有:
取值 描述
SOURCE 在源文件中有效(即源文件保留,领盒饭)。
CLASS 在 class 文件中有效(即 class 保留,领盒饭)。
RUNTIME 在运行时有效(即运行时保留)。
1.3、@Document:说明该注解将被包含在javadoc中
1.4、@Inherited:说明子类可以继承父类中的该注解
* @author Administrator
*
*/
//定义注解
//@Inherited
@Documented
@Target({ElementType.TYPE,ElementType.METHOD})//这个注解可以是类注解,也可以是方法的注解
@Retention(RetentionPolicy.RUNTIME)//定义的这个注解是注解会在class字节码文件中存在,在运行时可以通过反射获取到
public @interface myAnnotation
{
public enum ytsType{util,entity,service,mode};
public ytsType classType()default ytsType.util;
}
package org.rui.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnn2 {
String strValue() default "hello";
String[] arrayValue() default "wrold";
myEnum myEnumType() default myEnum.A;
enum myEnum{A,B,C,D} ;
}
/* enum myEnum{
A,B,C,D
}*/
package org.rui.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface HelloWorld {
public String name() default "";
}
package org.rui.annotation;
import java.lang.annotation.Annotation;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import org.rui.annotation.MyAnn2.myEnum;
/**
*
* @author liangrui
* Q:1067165280
*
*/
public class TestMyAnn2 {
//eunmValue=myEnum.A
@MyAnn2(strValue="hello joy",myEnumType=myEnum.B,arrayValue={"O","P","Q"})
//@Deprecated
public static void execute(){
System.out.println("test annotation2");
}
public static void main(String[] args) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
//读取注解上面的信息
//MyAnn2 ann2=new MyAnn2();
Cl