java自定义 注解 annotation、标签库tag、监听listener、junit简单测试代码(一)

2014-11-24 02:08:42 · 作者: · 浏览: 5

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