Annotaton(注解)是jdk5.0后引入的,先今很多主流框架都支持注解。
注解一般用于创建文档,跟踪代码中的依赖以及编译检查。以@注解名存在
jdk中常用的注解有
@Override 覆盖超类中方法
@Deprecated 被废弃的代码
@suppressWarings 警告
还有一些用于专门创建自定义的注解
自定义注解
@Target 应用注解位置:字段,方法,类..
@retemtop 使用级别,(runtime ,class,source)
@Documente 是否被包含在javadoc中
@Inherited 允许子类继承父类中的注解
定义一个注解目的还是在于使用,使用注解最主要的部分在于对注解的处理,那么就会涉及到注解处理器。从原理上讲,注解处理器就是通过反射机制获取被检查方法上的注解信息,然后根据注解元素的值进行特定的处理。
根据我们上节了解到的反射机制
我们做一个注解的定义和使用
1定义注解类
importjava.lang.annotation.ElementType;
importjava.lang.annotation.Retention;
importjava.lang.annotation.RetentionPolicy;
importjava.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interfaceUseCase {
public String name();
public String desciption() default "no description";
}
2定义用户类
package com.bjpower.node.spring;
public class User {
private String userName;
private String password;
@UseCase(name = "password", desciption = "密码")
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@UseCase(name="userName",desciption="用户名")
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public User() {
}
public User(String username) {
this.userName = username;
}
}
3获取注解类方法
public static void getrefect(String clas){
try {
Class<?> cls = Class.forName(clas);//反射获取类的Class对象
Method [] methods = cls.getDeclaredMethods();//获取类的所有方法
for (Method method : methods) {
//判断方法上是否有指定的注解,有则获取注解进行打印
if(method.isAnnotationPresent(UseCase.class) == true){
UseCase usercase = method.getAnnotation(UseCase.class);//获取注解类
System.out.println("用户信息:"+ usercase.name()+" 用户描述:"+usercase.desciption() );
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
4客户端测试
public class Client {
public static void main(String[] args) {
getrefect("com.bjpower.node.spring.User");
}
}
测试结果:
用户信息:password用户描述:密码
用户信息:userName用户描述:用户名
小结:
注解的解析是利用反射,动态的解析的,相比注释,他有自己独特的优点,我们可以对某些字段或方法进行特别说明来对页面信息进行展示。