Annotaton(注解)是jdk5.0后引入的,先今很多主流框架都支持注解。
注解一般用于创建文档,跟踪代码中的依赖以及编译检查。以@注解名存在
@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用户描述:用户名
注解的解析是利用反射,动态的解析的,相比注释,他有自己独特的优点,我们可以对某些字段或方法进行特别说明来对页面信息进行展示。
原文地址:http://blog.csdn.net/han_yankun2009/article/details/44724611