我正在尝试了解如何调用此注释@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 docs
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
}
}
如果不是这种情况,请通过一个简单的例子告诉我它是如何完成的。
答案 0 :(得分:2)
不,就像你在链接的Javadoc中所说的那样,这被定义为
@Retention(value=RUNTIME)
@Target(value=METHOD)
public @interface WebMethod
所以这是一个注释(@interface),你放在一个方法上(@Target(value = METHOD))。
@WebMethod没有“嵌套”到@WebService中,这是两个独立的注释(但当然,它们协同工作)。那个人继续学习一个方法而另一个人在一个类上由@Target定义。
答案 1 :(得分:0)
虽然在这种情况下似乎不是这种情况,但我遇到了一个相同的问题,即内部注释是否还可以。
根据我的实验,该方法有效
注释定义:
// NOT APPROPRIATE HERE, but how you'd do it if you used an explicit new promise
const promise = new Promise((resolve, reject) => {
snekfetch.get('https://www.website.com/api/public/users?name=' + user)
.then(body => {
const json = JSON.parse(body.text);
const name = json.name;
resolve(name);
})
.catch(reject);
});
用法:
// 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));
}
}