java注解

1. JDK自带注解

@Override 

@Deprecated

@Suppvisewarnings


2.  其他注解-Spring常见注解

@Autowired

@Service

@Repository


3.   其他注解-Mybatis常见注解

@InsertProvider

@UpdateProvider

@Options


4. 注解的分类

源码注解:注解只在源码中存在,编译成.class文件就不存在了

编译时注解:注解在源码和.class文件中都存在(例:JDK自带注解@Override)

运行时注解:在运行阶段还起作用,甚至会影响运行逻辑的注解(例:spring的 @Autowired)


5.自定义注解的语法要求

(1)使用@interface关键字自定义注解

(2)成员以无参无异常方式声明

(3)可以用default为成员指定一个默认值

(4)成员类型是受限制的,合法的类型包括原始类型及String , Class , Annotation, Enumeration

(5)如果注解只有一个成员,则成员名必须取名为value() ,  在使用时可以忽略成员名和赋值号=

(6)注解类可以没有成员,没有成员的注解称为标识注解


6. 元注解

(1)@Target({})   注解的作用域

(2)@Retention  注解的声明周期

(3)@Inherited    允许子注解继承 

(4)@Documented 生成javadoc时包含注解信息


7. 使用注解的语法:

@<注解名>(<成员名1>=<成员值1> , <成员名1>=<成员值1>,….)


8.解析注解

通过反射获取类、函数或成员上的运行时注解信息,从而实现动态控制程序运行的逻辑


下面通过两个例子讲解如何使用以及定义注解

Person接口

public interface Person {
	public String name();
}

Child类实现了Persos接口,并且使用了注解

@Description(author = "chenhong", desc = "an annotataion in class")
public class Child implements Person {

	@Override
	@Description(author = "chenhong", desc = "an annotation in method")
	public String name() {
		// TODO Auto-generated method stub
		return null;
	}

}

自定义Description注解

@Target({ ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Description {

	String desc();

	String author();

	int age() default 18;

}

测试

import java.lang.annotation.Annotation;
import java.lang.reflect.Method;

public class ParseAnnnotation {
	public static void main(String[] args) {
		// 使用类加载器加载类
		try {
			Class child = Class.forName("Child");
			// 找到类上面的注解
			boolean isExist = child.isAnnotationPresent(Description.class);
			if (isExist) {
				// 拿到注解实例
				Description d = (Description) child
						.getAnnotation(Description.class);
				System.out
						.println("author:" + d.author() + " desc:" + d.desc());
			}
			// 找到方法上的注解
			Method[] methods = child.getMethods();
			for (Method m : methods) {
				boolean isMExist = m.isAnnotationPresent(Description.class);
				if (isMExist) {
					Description d = (Description) m
							.getAnnotation(Description.class);
					System.out.println("author:" + d.author() + " desc:"
							+ d.desc());
				}
			}
			// 另外一种解析方法
			for (Method m : methods) {
				Annotation[] as = m.getAnnotations();
				for (Annotation a : as) {
					if (a instanceof Description) {
						Description d = (Description) a;
						System.out.println("author:" + d.author() + " desc:"
								+ d.desc());
					}
				}
			}
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
}


源代码:  http://download.csdn.net/detail/ch717828/8959057



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值