java --自定义注解的使用

来源:互联网 发布:地牢猎手5网络出错 编辑:程序博客网 时间:2024/05/02 03:35

Annotaton(注解)是jdk5.0后引入的,先今很多主流框架都支持注解。

注解一般用于创建文档,跟踪代码中的依赖以及编译检查。以@注解名存在


jdk中常用的注解有

@Override         覆盖超类中方法

@Deprecated       被废弃的代码

@suppressWarings  警告

 

还有一些用于专门创建自定义的注解


自定义注解

@Target       应用注解位置:字段,方法,类..

@retemtop      使用级别,runtime classsource

@Documente    是否被包含在javadoc

@Inherited      允许子类继承父类中的注解

 

定义一个注解目的还是在于使用,使用注解最主要的部分在于对注解的处理,那么就会涉及到注解处理器。从原理上讲,注解处理器就是通过反射机制获取被检查方法上的注解信息,然后根据注解元素的值进行特定的处理。

根据我们上节了解到的反射机制


 我们做一个注解的定义和使用


1定义注解类

[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. importjava.lang.annotation.ElementType;  
  2. importjava.lang.annotation.Retention;  
  3. importjava.lang.annotation.RetentionPolicy;  
  4. importjava.lang.annotation.Target;  
  5.    
  6. @Target(ElementType.METHOD)  
  7. @Retention(RetentionPolicy.RUNTIME)  
  8. public @interfaceUseCase {  
  9.    
  10.     public String name();  
  11.     public String desciption() default "no description";  
  12. }  

2定义用户类

[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. package com.bjpower.node.spring;  
  2. public class User {  
  3.   
  4.     private String userName;  
  5.     private String password;  
  6.   
  7.     @UseCase(name = "password", desciption = "密码")  
  8.     public String getPassword() {  
  9.         return password;  
  10.     }  
  11.   
  12.     public void setPassword(String password) {  
  13.         this.password = password;  
  14.     }  
  15.   
  16.     @UseCase(name="userName",desciption="用户名")  
  17.     public String getUserName() {  
  18.         return userName;  
  19.     }  
  20.   
  21.     public void setUserName(String userName) {  
  22.         this.userName = userName;  
  23.     }  
  24.   
  25.     public User() {  
  26.   
  27.     }  
  28.   
  29.     public User(String username) {  
  30.         this.userName = username;  
  31.     }  
  32.   
  33. }  

3获取注解类方法

[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. public static void getrefect(String clas){  
  2.       
  3.      try {  
  4.         Class<?> cls = Class.forName(clas);//反射获取类的Class对象  
  5.         Method [] methods = cls.getDeclaredMethods();//获取类的所有方法  
  6.           
  7.         for (Method method : methods) {  
  8.             //判断方法上是否有指定的注解,有则获取注解进行打印  
  9.             if(method.isAnnotationPresent(UseCase.class) == true){  
  10.                 UseCase usercase = method.getAnnotation(UseCase.class);//获取注解类  
  11.                 System.out.println("用户信息:"+ usercase.name()+" 用户描述:"+usercase.desciption() );  
  12.                   
  13.             }  
  14.         }  
  15.         } catch (Exception e) {  
  16.         e.printStackTrace();  
  17.     }  
  18. }  

4客户端测试

[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. public class Client {  
  2.   
  3.     public static void main(String[] args) {  
  4.   
  5.         getrefect("com.bjpower.node.spring.User");  
  6.     }  
  7. }  

测试结果:


用户信息:password用户描述:密码

用户信息:userName用户描述:用户名

 

小结:


注解的解析是利用反射,动态的解析的,相比注释,他有自己独特的优点,我们可以对某些字段或方法进行特别说明来对页面信息进行展示。


0 0