Java注释在注释声明中执行方法(用于android)
我对注释术语相当陌生。 我阅读了一些资料,得出结论,non回答了我的问题。 也许我用谷歌搜索错了。也许我忽略了,也许我只是不知所措 不管怎么说,事情是这样的 我正忙于编写一个需要“角色验证”的应用程序 为此,我想使用注释 因此,大致如下:Java注释在注释声明中执行方法(用于android),java,android,methods,annotations,Java,Android,Methods,Annotations,我对注释术语相当陌生。 我阅读了一些资料,得出结论,non回答了我的问题。 也许我用谷歌搜索错了。也许我忽略了,也许我只是不知所措 不管怎么说,事情是这样的 我正忙于编写一个需要“角色验证”的应用程序 为此,我想使用注释 因此,大致如下: @interface Validate (){ } 我的目标是实现以下几点: public @interface Validate() { public Validate() { //Do validation stuff re
@interface Validate (){
}
我的目标是实现以下几点:
public @interface Validate() {
public Validate() {
//Do validation stuff
return true/false
}
}
所以基本上我想在注释中定义方法。
我想打个电话
@Validate
public void methodThatRequiresAdminRole() {
doStuff();
}
只有管理员才能输入此方法。否则将生成一个错误
因此,如果@validate返回true,则应该执行该方法
对不起,如果我真的不清楚。我不太清楚如何恰当地问我想要什么。
因此,我希望这些例子能够讲述故事
希望很快能看到一些提示,甚至是答案。
谢谢
**编辑**
我需要强调的是,这些代码必须在android应用程序上使用。
所以我不喜欢使用不适合android的奇怪框架。我可以添加一个自定义库,在没有任何应用程序框架的情况下提供功能。我认为单靠注释是无法实现这一点的。它们旨在提供有关代码元素的元信息,而不是处理逻辑。
要真正实现对带注释的方法调用的限制,您需要在方法内部或外部手动检查访问权限,或者使用类似于“注释是元数据”的内容插入这样的检查。您需要编写的是注释处理器。注释本身无法完成验证逻辑。注释处理器将查看注释,然后进行验证并控制应用程序流。这个答案有很好的解释 您还需要使用@Retention(RetentionPolicy.RUNTIME)对注释进行注释,以便将注释信息保留到运行时
@Retention(RetentionPolicy.RUNTIME)
public @interface Validate() {
}
注意,这可能有点离题。使用with,处理注释相当简单: 创建一个方面:
@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">
<aspectj>
<weaver>
<!-- only weave classes in our application-specific packages -->
<include within="your.package..*" />
</weaver>
<aspects>
<!-- weave in just this aspect -->
<aspect name="com.bac.bsl.nonproc.TestAspect" />
</aspects>
</aspectj>
以防您熟悉.NET。我正在寻找“属性”,我确信这正是注释的含义。在这种情况下我会错吗?我突然想到了。谢谢你的回答,顺便说一句。看起来这是不可能实现的。我会让几分钟过去,看看会弹出什么答案。否则我将对此进行标记。@Joey AspectJ可用于android开发,但它仅限于使用编译时编织,这意味着您只能控制源代码所针对的方法的执行。@Joey Yes Java注释等同于.NET属性。您可以向方法添加注释,这些注释可以包含数据,但不能处理在方法调用上执行的逻辑。这更多的是AOP术语中所谓的方面的问题。我使用的是PlayFramework,它有一个注释@Secured,该注释将检查cookie是否存在,然后在会话缓存中验证cookie,以便执行。我不是很确定,因为我似乎看不出他们在scala中是如何做到的,但我确信它可以在没有AspectJ的情况下执行感谢您的建议以及链接。我知道下一步该怎么做。所以我帮了你,不客气。查看此链接,了解简单注释处理器的实现。
<context:load-time-weaver/>
java -javaagent:/path/to/spring-agent.jar -classpath $CP your.package.MyApp