`

JDK 5.0 注释 示例

    博客分类:
  • J2EE
阅读更多
1. 利用注释和反射 实现程序的方法按顺序执行
  Order.java
----
import java.lang.annotation.*;
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Order {
   int value();
}
-----
 Tarena.java
 
public class Tarena {
   @Order(1)
   public void studyUnix(){
      System.out.println("Unix");
   }
   @Order(8)
   public void studyEJB(){
      System.out.println("EJB");
   }
   @Order(2)
   public void studyCoreCpp(){
      System.out.println("C++");
   }
   @Order(3)
   public void studyUnixCpp(){
       System.out.println("Unix C++");
   }
   @Order(6)
   public void studyHibernate(){
      System.out.println("Hibernate");
   }
   @Order(5)
   public void studyJDBC(){
      System.out.println("JDBC");
   }
   @Order(7)
   public void studyJavaWeb(){
      System.out.println("Servlet JSP Struts");
   }
   @Order(4)
   public void studyCoreJava(){
      System.out.println("CoreJava");
   }
}

------
 
RunByOrder.java
 
import java.lang.reflect.*;
import java.util.*;
public class RunByOrder {
   public static void main(String[] args) throws Exception{
   Class c=Class.forName("Tarena");
   Object o=c.newInstance();
  
   TreeMap tm=new TreeMap();
   Method[] ms=c.getMethods();
   for(Method m:ms){
      if (m.isAnnotationPresent(Order.class)){
      Order order=m.getAnnotation(Order.class);
      int value=order.value();
      tm.put(value,m);
    }
  }
  
  Set s=tm.keySet();
  for(Integer i:s){
     Method m=tm.get(i);
     m.invoke(o);
  }
 }
}


====================
2. 注释的属性的写法,与使用
-----------------
Test.java
 
import java.lang.annotation.*;
@Target(value={ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Test {
    String parameter() default "liucy";
}
/*
 *@interface A1{
 * A2[] value();
 *}
 *@interface A2{
 * String[] value();
 *}
 *@A1({@A2({"A","B"}),@A2({"C","D"})})
 *public void m(){}
 *
 *
 *
 */

-----------
MyClass.java
 
public class MyClass {
 //要测 参数:"liucy"
   @Test
   public void m1(String s){
   System.out.println(s+" m1");
   }
   public void m2(String s){
   System.out.println(s+" m2");
   }
 //要测 参数:"tangliang"
   @Test(parameter="tangliang")
   public void m3(String s){
   System.out.println(s+" m3");
   }
 
}
--------------
Test1.java
 
public class Test1 {
   public static void main(String[] args) {
   MyClass mc=new MyClass();
   mc.m1("liucy");
   mc.m3("tangliang");
  }
}


==============

3. 利用注释及其属性来调用这个类中的方法
--------------
TestEngin.java
 
import java.lang.reflect.*;
public class TestEngine {
   public static void main(String[] args) throws Exception{
  //构造对象
   String className="MyClass2";
   Class c=Class.forName(className);
   Object o=c.newInstance();
  //获得方法对象
   Method[] ms=c.getMethods();
   for(Method m:ms){
   //判断Test注释在这个方法上是否存在
   if (m.isAnnotationPresent(Test.class)){
    //获得Test注释对象
   Test t=m.getAnnotation(Test.class);
    //获得Test注释的parameter属性
   String p=t.parameter();
    //调用这个方法
   m.invoke(o,p);
   }
  }
 }
}

-------------
Test.java
 
import java.lang.annotation.*;
@Target(value={ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Test {
 String parameter() default "liucy";
}
/*
 *@interface A1{
 * A2[] value();
 *}
 *@interface A2{
 * String[] value();
 *}
 *@A1({@A2({"A","B"}),@A2({"C","D"})})
 *public void m(){}
 *
 *
 *
 */

------------
 
MyClass.java
 
public class MyClass2 {
   @Test(parameter="Hiloo")
   public void p1(String s){
   System.out.println("p1 "+s);
   }
   @Test(parameter="Chenzq")
   public void p2(String s){
   System.out.println("p2 "+s) ;
   }
 
}


分享到:
评论
1 楼 精神分裂 2010-07-29  
第一个示例改下:
Set<Integer> s = tm.keySet();
for(Integer i:s){
Method m = (Method)tm.get(i);
m.invoke(o);
}
否则无法运行啊!

相关推荐

    JAVA2核心技术第7版卷2高级特性-中文版

    包括:多线程、集合框架、网络api、数据库编程、分布式对象等,深入探究了swing、java 2d api、javabean、java安全模式、xml、注释、元数据等主题,同时涉及本地方法、国际化以及jdk 5.0的内容。本书适合软件开发...

    JAVA2核心技术(中文的PDF).part4.rar

    包括:多线程、集合框架、网络API、数据库编程、分布式对象等,深入探究了Swing、Java 2D API、JavaBean、Java安全模式、XML、注释、元数据等主题,同时涉及本地方法、国际化以及JDK 5.0的内容。本书适合软件开发...

    JAVA2核心技术第1卷.基础知识7th.part01(中文清晰版)

    包括:多线程、集合框架、网络API、数据库编程、分布式对象等,深入探究了Swing、Java 2D API、JavaBean、Java安全模式、XML、注释、元数据等主题,同时涉及本地方法、国际化以及JDK 5.0的内容。本书适合软件开发...

    多jdk多tomcat配置

    在软件开发过程中,不同的项目可能对Java运行环境有着不同的需求,比如一个项目需要使用JDK 1.4 和 Tomcat 5.0,而另一个项目则需要使用JDK 1.5 和 Tomcat 6.0。这种情况下,单一的Java Home配置显然无法满足所有...

    JAVA2核心技术(中文的PDF).part3.rar

    包括:多线程、集合框架、网络API、数据库编程、分布式对象等,深入探究了Swing、Java 2D API、JavaBean、Java安全模式、XML、注释、元数据等主题,同时涉及本地方法、国际化以及JDK 5.0的内容。本书适合软件开发...

    图解eclipse+myelcipse开发EJB

    对于Weblogic 9.0,推荐使用JDK 5.0,而Weblogic 8则要求JDK 1.4版本。这些版本的差异主要是为了确保服务器和EJB组件之间的兼容性。 在EJB的编码阶段,给出了一段SessionBean的示例代码。SessionBean是EJB的一种...

    jdk版本的区别.pdf

    这里我们将详细探讨JDK 1.4、1.5(也称为Java 5.0)和1.6(也称为Java 6.0)之间的主要差异和新特性。 1. **JDK 1.5的新特性** - **泛型**:泛型是Java 5引入的一项重大改进,它允许在定义类、接口和方法时指定...

    Java基础加强演示文稿

    以上内容涵盖了 Java 基础加强学习的关键知识点,包括 Eclipse 的使用、Junit、JDK 5.0 新特性、反射机制以及泛型的定义和使用。通过掌握这些核心概念和技术,可以帮助开发者更好地理解和运用 Java 语言,提高编程...

    Java 2核心技术 卷II:高级特性(第七版).part1

    深入探究了Swing、Java 2D API、JavaBean、Java安全模式、XML、注释、元数据等主题,同时涉及本地方法、国际化以及JDK 5.0的内容。本书适合软件开发人员、高等院校学生和教师参考。. &lt;br&gt;本书包括Java 2平台标准...

    Java 2核心技术 卷II:高级特性(第七版).part3

    深入探究了Swing、Java 2D API、JavaBean、Java安全模式、XML、注释、元数据等主题,同时涉及本地方法、国际化以及JDK 5.0的内容。本书适合软件开发人员、高等院校学生和教师参考。. &lt;br&gt;本书包括Java 2平台标准...

    Java 2核心技术 卷II:高级特性(第七版).part2

    深入探究了Swing、Java 2D API、JavaBean、Java安全模式、XML、注释、元数据等主题,同时涉及本地方法、国际化以及JDK 5.0的内容。本书适合软件开发人员、高等院校学生和教师参考。. &lt;br&gt;本书包括Java 2平台标准...

    java JDK 实例宝典源文件

    Java JDK实例宝典源文件是针对Java初学者和开发者的一份宝贵资源,它包含了大量基于J2SE 5.0版本的实战示例,旨在帮助读者深入理解和掌握Java编程技术。JDK(Java Development Kit)是Java编程的核心工具集,包含...

    Java_コーディング規約.pdf

    此外,还区分了不同类型的规范,例如“Java5.0”表示该规范是为JDK 5.0特别设计的。 需要注意的是,文档中提到的“CC”、“FB”和“Eclipse”等图标右上角带有“*”的表示该规范不能被对应的工具完全检查,使用时应...

    JAVASE学习笔记

    - **JDK1.5 (JDK5.0)**: 引入了泛型、枚举等新特性。 - **JDK6.0**: 改进了GUI设计工具,增强了Java SE的安全性。 - **JDK7.0**: 增加了多核处理器的支持,改进了垃圾回收机制。 - **JDK8.0**: 当前最广泛使用的...

    jpa学习总结,pdf类型的,详细介绍了jpa的应用

    1. **ORM映射元数据**:支持XML和JDK 5.0注释两种元数据形式,用以描述对象和数据库表之间的映射关系。 2. **Java持久化API**:提供一系列API用于操作实体对象,实现数据的增删改查(CRUD)操作。 3. **查询语言(JPQL)...

    第一个JPA演示程序

    该例子下载以后在Eclipse中导入,接着下载MySQL 5.0的驱动,然后参见实体类的注释,上面有数据库脚本,可以方便你运行该示例。代码几乎一行一注释,非常详细的说明了使用JPA的步骤,是学习JPA编程的好例子。

    java 混淆工具,不可逆 jocky 也许是最好的了

    我们可以把经过 Jocky编译的类文件以UltraEdit打开,可以发现在第8个字节上(类文件的major version)的数值是0x30,即十进制的48,这是JDK 1.4所能够理解的类文件版本(JDK 5.0默认编译的类文件版本是49)。前提是:应用...

    java单选题.pdf

    JDK5.0及更高版本中,如果没有设置`classpath`,JVM会自动将其设置为`.`,即当前目录。 配置`path`环境变量是为了在任意目录下可以使用`javac`和`java`命令。而`classpath`的配置则关乎Java虚拟机查找类文件的能力...

Global site tag (gtag.js) - Google Analytics