文章目录
一、@Deprecated注解源码
以@Deprecated注解
源码为例,两个红框的就是属性(虽然看着很像方法)
二、注意:
- 如果属性后面没加
default
的话,那在用这个注解的时候一定要 显式地给出 属性名 = 属性值- 如:
@Deprecated(since = "1")
- 如:
- 如果属性名是
value
且只有这一个属性的时候,使用注解可以不写出属性名,直接给值就行 - 如果除了
value
还有其他属性的话,且其他属性没有给出默认值的话,就不能省略value的属性名了(如第二行的@Retention
注解,后面没跟属性名,实际上就是只有一个叫value
的属性)
三、如果除了value有其他属性,且其他属性没给default
public @interface Anno {
String value();
String name();
}
用的时候不显式地给出value属性名
的话就抛异常
四、如果除了value有其他属性,其他属性有给default
public @interface Anno {
String value();
String name() default "";
}
可以省略value
这个属性名
五、属性类型可以是哪些
byte short int long float double boolean char String Class 枚举类型
以及它们的数组形式
注:用的时候如果数组只有一个元素的话,可以不写大括号{}
六、Servlet的@WebServlet源码
@WebServlet
的value
和urlPatterns
效果是一样的,都是为了指定url的请求路径之所以重复给出两个效果一样的属性,就是因为如果在
@WebServlet
里只配置路径而不需要配置其他的话,就可以省略value属性名直接给路径(因为其他属性都给default了)
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface WebServlet {
String name() default "";
/**
* A convenience method, to allow extremely simple annotation of a class.
*
* @return array of URL patterns
* @see #urlPatterns()
*/
String[] value() default {};
/**
* @return array of URL patterns to which this Filter applies
*/
String[] urlPatterns() default {};
int loadOnStartup() default -1;
WebInitParam[] initParams() default {};
boolean asyncSupported() default false;
String smallIcon() default "";
String largeIcon() default "";
String description() default "";
String displayName() default "";
}