Java注释在注释声明中执行一个方法(用于android)

我对注释术语相当新。 我已经阅读了一些消息来源并得出结论,我没有回答我的问题。 也许我使用错误的搜索来搜索。 也许我忽略了,或者我可能只是无知……

无论如何这里是交易。

我正在忙着编写一个需要“角色validation”的应用程序。

为此,我想使用注释。

所以有以下几点:

@interface Validate (){ } 

我的目标是实现以下目标:

 public @interface Validate() { public Validate() { //Do validation stuff return true/false } } 

所以基本上我想在注释中定义方法。 我希望能够打电话

 @Validate public void methodThatRequiresAdminRole() { doStuff(); } 

只有管​​理员才能输入此方法。 否则应生成错误。

因此,如果@validate返回true,则应执行该方法

对不起,如果我真的不清楚。 我不太确定如何正确地问我想要什么。 所以我希望这些例子讲述这些故事。

希望尽快阅读提示甚至答案。 谢谢。

**编辑**

我需要强调的是,代码必须在Android应用程序上使用。 所以我更喜欢不使用不适合android的奇怪框架。 我没有问题添加一个自定义库,它提供了没有任何应用程序框架的function。

注释是元数据。 您需要编写的是注释处理器。 注释本身无法完成validation逻辑。 注释处理器将查看注释,然后执行validation并控制应用程序流。 这个答案有一个很好的解释Java Java Annotations可以帮我解决这个问题吗?

您还需要使用@Retention(RetentionPolicy.RUNTIME)注释注释,以便保留注释信息直到运行时。

 @Retention(RetentionPolicy.RUNTIME) public @interface Validate() { } 

请注意,这可能是非常偏离主题的。 使用spring AOP ,处理注释非常简单:

创建一个方面:

 @Aspect public class RoleCheckAspect { @Before("@annotation(your.package.Validate)") public void doAccessCheck() throws Exception { // Do validation stuff if (!valid) throw new IllegalAccessException("foo"); } } } 

设置你的方面:

在META-INF / aop.xml中

 < !DOCTYPE aspectj PUBLIC "-//AspectJ//DTD//EN" "http://www.eclipse.org/aspectj/dtd/aspectj.dtd">           

设置加载时间编织

在spring的背景下:

  

确保使用您的应用启动spring-agent:

 java -javaagent:/path/to/spring-agent.jar -classpath $CP your.package.MyApp 

我不认为你可以单独使用注释来实现这一点。 它们旨在提供有关代码元素的元信息,而不是处理逻辑。 要实际实现对带注释的方法调用的限制,您需要在方法内部或外部手动检查访问权限,或使用类似http://www.eclipse.org/aspectj/的内容注入此类检查。