HttpClient里的注解

1.@CrossOrigin

出于安全原因,浏览器禁止Ajax调用驻留在当前原点之外的资源。例如,当你在一个标签中检查你的银行账户时,你可以在另一个选项卡上拥有EVILL网站。来自EVILL的脚本不能够对你的银行API做出Ajax请求(从你的帐户中取出钱!)使用您的凭据。
//实现跨域注解
//origin="*"代表所有域名都可访问
//maxAge飞行前响应的缓存持续时间的最大年龄,简单来说就是Cookie的有效期 单位为秒
//若maxAge是负数,则代表为临时Cookie,不会被持久化,Cookie信息保存在浏览器内存中,浏览器关闭Cookie就消失
@CrossOrigin源码解析:
@Target({ ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface CrossOrigin {

String[] DEFAULT_ORIGINS = { "*" };

String[] DEFAULT_ALLOWED_HEADERS = { "*" };

boolean DEFAULT_ALLOW_CREDENTIALS = true;

long DEFAULT_MAX_AGE = 1800;


/**
 * 同origins属性一样
 */
@AliasFor("origins")
String[] value() default {};

/**
 * 所有支持域的集合,例如"http://domain1.com"。
 * <p>这些值都显示在请求头中的Access-Control-Allow-Origin
 * "*"代表所有域的请求都支持
 * <p>如果没有定义,所有请求的域都支持
 * @see #value
 */
@AliasFor("value")
String[] origins() default {};

/**
 * 允许请求头重的header,默认都支持
 */
String[] allowedHeaders() default {};

/**
 * 响应头中允许访问的header,默认为空
 */
String[] exposedHeaders() default {};

/**
 * 请求支持的方法,例如"{RequestMethod.GET, RequestMethod.POST}"}。
 * 默认支持RequestMapping中设置的方法
 */
RequestMethod[] methods() default {};

/**
 * 是否允许cookie随请求发送,使用时必须指定具体的域
 */
String allowCredentials() default "";

/**
 * 预请求的结果的有效期,默认30分钟
 */
long maxAge() default -1;

}

2.@Documented

Documented注解表明这个注释是由 javadoc记录的,在默认情况下也有类似的记录工具。 如果一个类型声明被注释了文档化,它的注释成为公共API的一部分。
@Documented注解只是用来做标识,没什么实际作用,了解就好。

3.@Retention注解作用

作用是定义被它所注解的注解保留多久,一共有三种策略,定义在RetentionPolicy枚举中.
在这里插入图片描述

source:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;被编译器忽略
这种类型的Annotations只在源代码级别保留,编译时就会被忽略,在class字节码文件中不包含。

class:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期
这种类型的Annotations编译时被保留,默认的保留策略,在class文件中存在,但JVM将会忽略,运行时无法获得。

runtime:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在
这种类型的Annotations将被JVM保留,所以他们能在运行时被JVM或其他使用反射机制的代码所读取和使用。
这3个生命周期分别对应于:Java源文件(.java文件) —> .class文件 —> 内存中的字节码。
生命周期长度 SOURCE < CLASS < RUNTIME
如果需要在运行时去动态获取注解信息,那只能用 RUNTIME 注解;
如果要在编译时进行一些预处理操作,比如生成一些辅助代码(如 ButterKnife),就用 CLASS注解;
如果只是做一些检查性的操作,比如 @Override 和 @SuppressWarnings,则可选用 SOURCE 注解。

4.@Target:注解的作用目标

Target通过ElementType来指定注解可使用范围的枚举集合
@Target(ElementType.TYPE)——接口、类、枚举、注解
@Target(ElementType.FIELD)——字段、枚举的常量
@Target(ElementType.METHOD)——方法
@Target(ElementType.PARAMETER)——方法参数
@Target(ElementType.CONSTRUCTOR) ——构造函数
@Target(ElementType.LOCAL_VARIABLE)——局部变量
@Target(ElementType.ANNOTATION_TYPE)——注解
@Target(ElementType.PACKAGE)——包
@Inherited:说明子类可以继承父类中的该注解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值