java注解

详情:http://www.cnblogs.com/pepcod/archive/2013/02/16/2913474.html


实现要求

① 通过类中的注解,找到要执行的方法

② 通过类中的注解,通过传入的参数判断要不要执行这段代码


注解类:

package IMP;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 权限组成部分
 * Created by sff on 2017/1/12.
 */

/** @Retention     表示需要在什么级别保存该注解信息。可选的 RetentionPolicy 参数包括:
 * SOURCE:注解将被编译器丢弃
 * CLASS:注解在class文件中可用,但会被VM丢弃
 * RUNTIME:VM将在运行期间保留注解,因此可以通过反射机制读取注解的信息
 * */
@Retention(RetentionPolicy.RUNTIME)
/** @Target       表示该注解可以用于什么地方,可能的 ElementType 参数有:
 * CONSTRUCTOR:构造器的声明
 * FIELD:域声明(包括enum实例)
 * LOCAL_VARIABLE:局部变量声明
 * METHOD:方法声明
 * PACKAGE:包声明
 * PARAMETER:参数声明
 * TYPE:类、接口(包括注解类型)或enum声明
 */
@Target({ElementType.TYPE,ElementType.METHOD})
public @interface Auth {
    public String id();

    /**
     * default 是默认的意思,@Auth(id = "45") 的意思就是被注解的对象的Auth对象id="45",authority="我是 45"
     * @return
     */
    public String authority() default "我是 45";
}


实现类:

package IMP;

import java.lang.reflect.Method;

/**
 * 权限判断
 * Created by ASUS on 2016/12/6.
 */
public class User {
    @Auth(id = "45")
    public void validateAuth(String authority) {
        try{
            /** User.class.getMethod("validateAuth", String.class)  找到自己方法 ,通过判断,是不是进行if语句中的东西*/
            Auth uc = User.class.getMethod("validateAuth", String.class).getAnnotation(Auth.class);
            if(authority.equals(uc.authority())){
                System.out.println("恭喜你,你有这个权限:"+authority);
            }else{
                System.out.println("对不起你没有这个权限,回家洗洗睡吧");
            }
        } catch (java.lang.NoSuchMethodException e){
            System.err.println("找不到这个方法validateAuth"+e);
        }
    }

    @Auth(id = "46", authority = "我是 46")
    public void validate(String authority) {
        System.out.println("我是 46");
        System.out.println(authority);
    }

    @Auth(id = "47", authority = "我是 47")
    public static void main(String[] args) throws Exception{
        User u = new User();
        /** 遍历方法,看看那个方法是我们要执行的 */
        for (Method m : User.class.getDeclaredMethods()) {
            Auth uc = m.getAnnotation(Auth.class);
            if (uc.id().equals("45")) {
                try{
                    /** 运行Method对象,有点像Field的get方法*/
                    m.invoke(new User(),"我是 45");
                    System.out.println("---------------------------------");
                    m.invoke(new User(),"我是 47");
                } catch (java.lang.IllegalAccessException e){
                    System.err.println("执行方法出错了:"+m.getName());
                } catch (java.lang.reflect.InvocationTargetException e) {
                    System.err.println("执行方法出错了:" + m.getName());
                }
            }
        }
    }
}

实现类的运行结果图:


实现类变形:

package IMP;

import java.lang.reflect.Method;

/**
 * 权限判断
 * Created by ASUS on 2016/12/6.
 */
public class User {
    @Auth(id = "45")
    public void validateAuth(String authority) {
        try{
            /** User.class.getMethod("validateAuth", String.class)  找到自己方法 ,通过判断,是不是进行if语句中的东西*/
            Auth uc = User.class.getMethod("validateAuth", String.class).getAnnotation(Auth.class);
            if(authority.equals(uc.authority())){
                System.out.println("恭喜你,你有这个权限:"+authority);
            }else{
                System.out.println("对不起你没有这个权限,回家洗洗睡吧");
            }
        } catch (java.lang.NoSuchMethodException e){
            System.err.println("找不到这个方法validateAuth"+e);
        }
    }

    @Auth(id = "46", authority = "我是 46")
    public void validate(String authority) {
        System.out.println(authority);
    }

    @Auth(id = "47", authority = "我是 47")
    public static void main(String[] args) throws Exception{
        User u = new User();
        /** 遍历方法,看看那个方法是我们要执行的 */
        for (Method m : User.class.getDeclaredMethods()) {
            Auth uc = m.getAnnotation(Auth.class);
            if (uc.id().equals("45")) {
                try{
                    /** 运行Method对象,有点像Field的get方法*/
                    m.invoke(new User(),"我是 45");
                    System.out.println("---------------------------------");
                    m.invoke(new User(),"我是 47");
                } catch (java.lang.IllegalAccessException e){
                    System.err.println("执行方法出错了:"+m.getName());
                } catch (java.lang.reflect.InvocationTargetException e) {
                    System.err.println("执行方法出错了:" + m.getName());
                }
            }
        }

        u.fun(u.getClass().getMethod("validate",String.class));
    }

    @Auth(id = "48")
    public void fun(Method method) throws Exception{
        User u = new User();
        try{
            System.out.println("=================================");
            System.out.println("方法注解id:"+method.getAnnotation(Auth.class).id());
            method.invoke(new User(),"我就是将要运行的方法:"+method.getName());
        } catch (java.lang.IllegalAccessException e){
            System.err.println("执行方法出错了:"+method.getName());
        } catch (java.lang.reflect.InvocationTargetException e) {
            System.err.println("执行方法出错了:" + method.getName());
        }
    }
}

结果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值