Java 用户定义的注释

Java 用户定义的注释,java,annotations,Java,Annotations,我不熟悉用户定义的注释。我正在尝试创建自己的注释,如@NotNull 注释 我想要方法上的注释,如果该方法满足条件,我想要执行该方法 这是我的密码: @Target({ ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) public @interface PolicyCheck{ String[] policies(); } 我想这样使用它: @PolicyCheck(policies = {"P1", "P2"

我不熟悉用户定义的注释。我正在尝试创建自己的注释,如
@NotNull
注释

我想要方法上的注释,如果该方法满足条件,我想要执行该方法

这是我的密码:

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

    String[] policies();    
}
我想这样使用它:

@PolicyCheck(policies = {"P1", "P2"})
public void doSomething(){


}
当我使用提供的策略在方法上调用它时,如果它满足条件,则只有它必须运行该方法

如果我对注释的用法有错误,请纠正我,并告诉我这是否可能。我也被困在哪里写它背后的逻辑


谢谢。

注释可以在运行时或编译时进行评估,选择什么方法取决于实际用例

在运行时使用反射:如注释中所述,您需要一个代理类。例如,您需要拦截对带注释方法的任何调用,检查策略,然后调用实际方法或抛出异常。Java提供了类,您可以使用该类来检查。您可以让用户使用依赖项注入或提供处理代理创建的方法。
例如,类似这样的方法:
Foo-Foo=YourAnnotationLibrary.createProxy(Foo.class)

另一种方法是使用可在用户编译代码时运行的。这对于静态检查很有用,比如确保注释方法上的某些参数类型——但是您将无法检查运行时出现的空参数。您可以生成代理类,这些代理类将在运行时强制执行策略


使用反射可能不那么复杂。如果注释处理适用于您的用例,那么对用户来说可能更方便,因为它与现代IDE很好地集成,可以在源代码编辑器中直接在元素上显示警告、错误或附加信息,并且可以在应用程序运行之前防止许多错误

谁调用该方法?通过反射,您可以发现您在哪些方法上应用了注释,现在您必须考虑如果有人调用了与您应用该注释相同的方法,您要做什么?当有人在代理对象上调用带注释的方法时,您需要对类进行一些代理,然后您需要决定要执行的操作。@SAM:谢谢您的评论。我在这里有点困惑。你能用一个简单的代码示例给我解释一下吗。很抱歉问,我到处都找了,但运气不好。谢谢。@ADi请详细说明您的要求,您想如何处理自定义批注?我将非常乐意帮助您。谢谢:)我将尝试并实现这一点。