1

我试图了解如何调用此注释@WebMethod

import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;

@WebService          //<----- is this annotation nested in WebService class
@SOAPBinding(style = Style.RPC)
public interface TimeServer {


    @WebMethod String getTimeAsString();  //<-------is this nested in a class too
    @WebMethod long getTimeAsElapsed();
}

根据我的导入 javax.jws.WebMethod 和 Java 文档
http://docs.oracle.com/javase/7/docs/api/javax/jws/WebMethod.html
public @interface WebMethod进行了描述。

@WebMethod 注解是否定义为 WebMethod 类?
WebMethod 类的源代码可以是这样的吗?

Public class WebMethod{
   //members
   //methods
  public @interface WebMethod{ //annotation definition in class, is this possible
  }
}

如果不是这种情况,请让我用一个简单的例子来完成它。

4

2 回答 2

2

不,就像它在您链接到的 Javadoc 中所说的那样,这被定义为

@Retention(value=RUNTIME)
@Target(value=METHOD)
public @interface WebMethod

因此,这是您在方法 (@Target(value=METHOD)) 上放置的注释 (@interface)。

@WebMethod 没有“嵌套”到 @WebService 中,它们是两个独立的注释(当然,它们协同工作)。一个在方法上,另一个在类上由@Target 定义。

于 2013-07-16T12:13:16.393 回答
0

虽然在这个特定实例中似乎并非如此,但我遇到了同样的问题,即内部注释是否可以。

根据我的实验,这有效

注释定义:

// pkg2/I.java
package pkg2;

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

public final class I {
    private I(){
    }
    @Retention(RetentionPolicy.RUNTIME)
    public static @interface Inner {}
}

用法:

// pkg/C.java
package pkg;

import pkg2.I;

@I.Inner
public class C {
    public static void main(String[] args) throws Exception {
         System.out.println(C.class.getAnnotation(I.Inner.class));
    }
}

跑步:

$ java pkg/C
@pkg2.I$Inner()
于 2018-08-30T09:45:19.817 回答