科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Java 中的Annotation2

Java 中的Annotation2

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

 在创建EJB组件时,必需提供一些定义,使得EJB组件使用一些服务例如:安全服务,持久化服务,事务服务。EJB容器可以提供这些服务,这样EJB只要实现业务逻辑就可以了。但是说到底EJB容器使用EJB组件的元数据来提供这些服务,在以前EJB的元数据是以XML配置文件形式出现的,这些配置文件与EJB源文件是分开的。

来源:IT专家网 2008年6月2日

关键字: Annotation java

  • 评论
  • 分享微博
  • 分享邮件
Java 中的Annotation的定义

  Java中的Annotation

  Java定义了几个标准的meta-annotation.在新Package中java.lang.annotation 中包含了以下meta-annotation:

  meta-annotation 说明

  @Target 1. annotation的target是一个被标注的程序元素。target说明了annotation所修饰的对象范围:annotation可被用于packages、types(类、接口、枚举、annotation类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数)。在annotation类型的声明中使用了target可更加明晰其修饰的目标。

 meta-annotation  说明
 @Target 1.       annotation的target是一个被标注的程序元素。target说明了annotation所修饰的对象范围:annotation可被用于packages、types(类、接口、枚举、annotation类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数)。在annotation类型的声明中使用了target可更加明晰其修饰的目标。 
 
2.       ElementType的定义 
 
   TYPE // Class, interface, or enum (but not annotation)

   FIELD// Field (including enumerated values) 
 
   METHOD// Method (does not include constructors) 
 
   PARAMETER// Method parameter 
 
   CONSTRUCTOR// Constructor 
 
   LOCAL_VARIABLE// Local variable or catch clause 
 
   ANNOTATION_TYPE// Annotation Types (meta-annotations) 
 
   PACKAGE// Java package

 @Retention 1.       SOURCE//按照规定使用注释,但是并不将它保留到编译后的类文件中 
2.       CLASS//将注释保留在编译后的类文件中,但是在运行时忽略它 
3.       RUNTIME//将注释保留在编译后的类文件中,并在第一次加载类时读取它
 @Documented  Documented 表示注释应该出现在类的 Javadoc 中
 @Inherited  一个Annotation将被继承

  三个标准的Annotation 在java.lang包中:

 @Deprecated  对不再使用的方法进行注释
 @Override  指明注释的方法覆盖超类的方法
 @SuppressWarnings  阻止编译器的警告,例:当类型不安全时

  下例来说明这三个标准的Annotation:

package sz.starbex.bill.annotation;
import java.util.ArrayList;
import java.util.List;
public class SimpleOverrideAnnotation {
 public static void main(String[] args) {
  SimpleOverrideAnnotation test = new SimpleOverrideAnnotation();
  System.out.println(test.toString());
 }
 @Override
 public String toString() {
  return "自己的类自己输出";
 }
 @Deprecated
 public void doSomething() {
  System.out.println("方法已过时" );
 }
 @SuppressWarnings(value={"unchecked"})
 public void testSuppressWarnings(){
  List testList=new ArrayList();
  testList.add("KKKK");//没有使用范型,类型不安全
  }
}

Annotation使用实例

  1.一个组合的Annotation,注释类的

  a. 商标Annotation

       package sz.starbex.bill.annotation;
       public @interface Trademark {
           String name();
           String owner();
      }

  b.License的annotation

      package sz.starbex.bill.annotation;
      import java.lang.annotation.*;
      @Retention(RetentionPolicy.RUNTIME)
      @Target({ElementType.TYPE, ElementType.PACKAGE})
      public @interface License {
      String name();
      String notice();
      boolean redistributable();
      Trademark[] trademarks();
    }

  c.测试类

     package sz.starbex.bill.annotation;
     @License(name="Bill",
     notice="许可证",
     redistributable=true,
     trademarks={@Trademark(name="Mercedes",owner="Swedish"),
       @Trademark(name="Daewoo",owner="Korean")
       } 
     )
   public class TestLicenseAnnotation {
   public static void main(String[] args) {
   TestLicenseAnnotation test=new TestLicenseAnnotation();
   License license=test.getClass().getAnnotation(License.class);
   System.out.println("License发放人:"+license.name());
   System.out.println("License注意事项:"+license.notice());
   System.out.println("License许可:"+license.redistributable());
   Trademark [] marks=license.trademarks();
   for(Trademark mark:marks){
       System.out.println("商标名称:"+mark.name());
       System.out.println("商标的使用者:"+mark.owner());
  }
 }
}

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章