Java自定义注释

时间:2014-05-16 13:09:02

标签: java annotations

我想在方法上写自定义annonation。我的用例是 - 我有用户有角色所以当用户试图访问某些类的方法然后我想检查他的角色。所以我希望传递注释。

我的代码在这里     package com.samples;

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


@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Roles {

public String roles();
}


package com.samples;

public class AnnotationExample {

@Roles(roles="admin")
public void createAction(){
String userrole = "admin"; // this hardcoded value
            // a
// here i want to compare annotaiton value with user role


}
}

我该怎么做? 可以将注释值声明为对象值。喜欢 @Roles(Role.AADMIN)

2 个答案:

答案 0 :(得分:0)

要检查您需要使用反射的注释。

Roles r = AnnotationExample.class.getMethod("createAction").getAnnotation(Roles.class);
if ("admin".equals(r.roles())) //has admin roles
  

可以将注释值声明为对象值。比如@Roles(Role.AADMIN)

我认为你想要的是一个Enum。

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Roles {

   public Role roles();
}

enum Role { ADMIN, USER };

public class AnnotationExample {

   @Roles(roles=Role.ADMIN)
   public void createAction(){
      Role userrole = Role.ADMIN;
    }
}

答案 1 :(得分:0)

如果你真的需要重新发明安全注释(如果你不想使用已经可用的选项和EJB或Spring之类的声明性安全性),你至少可以看看它们是如何实现它的。例如,Here用于EJB实现之一。

但也许你会重新考虑?