1. 利用注释和反射 实现程序的方法按顺序执行
====================
2. 注释的属性的写法,与使用
-----------------
==============
3. 利用注释及其属性来调用这个类中的方法
--------------
- 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) ;
- }
- }