全面解析Java注解

一、注解概念

	注解概念:java提供了一种源程序中的元素关联任何信息和任何元数据的一种途径和方法
二、java常见注解
1、@Override:重写父类的该函数。
2、@Deprecated: 表示该函数已过时。
  前两个都是有在父类,下面用在子类
3、@SuppressWarning:忽略某某警告
三、常见第三方注解
Spring: 	@Autowired      @Service    @Repository
1、@Autowired:
可以对成员变量、方法和构造函数进行标注,来完成自动装配的工作
用法: 
public class UserManagerImpl implements UserManager {
   @Autowired @Target({ElmentType.METHOD,ElementType.Type})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @ interface Description{
   String desc();
   String author();
   int age() default18;
  }
   private UserDao userDao;
}
2、@Service:
定义某个类为一个bean,则在这个类的类名前一行使用@Service("XXX"),
就相当于讲这个类定义为一个bean,bean名称为XXX。而无需去xml文件内去配置。
四、注解分类
按照运行机制分 :
1、源码注解 :
只存在于源码中,在.class文件中没有
2、编译时注解 :
源码和.class文件中均存在 如:@override @deprecated等jdk自带的注解
3、运行时注解:
运行阶段仍然会起作用,甚至影响运行逻辑,如:spring的autowired
四、自定义注解
自定义注解语法要求
	• 使用关键字@interface定义注解
		 如:public @interface AnnotationDemo { }
	• 成员以无参无异常的方式声明,可以用default为成员指定的一个默认值
	• 成员类型是受限的,只能是原始类型及String, Class, Annotation, Enumeration
	• 如果注解只有一个成员,则成员名必须为value(),在使用时可以忽略成员名和赋值号(=)
	• 标识注解:没有成员的注解
	• 元注解:
		 @Target:注解的作用域(使用枚举类型ElementType的成员进行标识,可同时指定多个)
			§ ElementType包括:TYPE(类或接口),  FIELD(字段),  METHOD,  PARAMETER,  CONSTRUCTOR,  LOCAL_VARIABLE,  ANNOTATION_TYPE,  PACKAGE,  TYPE_PARAMETER,  TYPE_USE
		 @Retention:生命周期(使用枚举类型RetentionPolicy的成员进行标识)
			§ RetentionPolicy包括:SOURCE,  CLASS,  RUNTIME
		 @Inherited:允许子注解继承
		 @Documented:生成javadoc文档时会包含注解
```代码
@Target({ElmentType.METHOD,ElementType.Type})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @ interface Description{
	String desc();
	String author();
	int age() default18;
}
```
五、注解应用实战
1、使用注解的语法:
@<注解名>(<成员名1>=<成员值1>,<成员名2>=<成员值2>,...)
@Description(desc ="I am eyeColor",author="C boy",age=18)
public String eyeColor(){
	return "red";
}
2、解析注解
	• 使用类加载器加载类(Class.forName)
	• 获取类上的注解(可以先判断注解是否存在)
		 public boolean isAnnotationPresent(Class<? extends Annotation> paramClass)
	• 拿到注解实例
		 public <A extends Annotation> A getAnnotation(Class<A> paramClass)
		 使用实例获取成员的值(如d.value())
	• 获取方法上的注解
		 通过反射拿到类上的所有方法,返回Method数组
			§ public Method[] getMethods()
		 遍历Method数组取得方法上的注解(可以先判断注解是否存在)
			§ public boolean isAnnotationPresent(Class<? extends Annotation> paramClass)
		 拿到方法上注解的实例
			§ public <A extends Annotation> A getAnnotation(Class<A> paramClass)
		 使用实例获取成员的值(如d.value())
	• *获取方法上注解也可以使用getAnnotations获取Method数组中的全部注解
		 public Annotation[] getAnnotations()

实战例子参考:《Java注解(Annotation)详解(四)——注解反射生成SQL语句

http://blog.youkuaiyun.com/zen99t/article/details/50351575


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值