1、@FeignClient
主要用于客户端服务发现,实际就是调用其他的服务。
参数有如下:
value, name:作用一样,如果没有配置url那么配置的值将作为服务名称,用于服务发现。反之只是一个名称。
url:用于配置指定服务的地址,相当于直接请求这个服务,不经过Ribbon的服务选择。像调试等场景可以使用。
备注:只加了该注解,bean不会自动创建,不会纳入springioc容器的,还需要在启动类上加注解@EnableFeignClients,该注解负责注册用feignclient标记的客户端
2、@EnableFeignClients
参数有如下:
basePackages:指定需要扫描的包路径
一般情况下,我们在启动类上面添加了@EnableFeignClients注解就是表明当前应用服务(我们称之为服务A)中有的地方想要引用其它应用服务(我们称之为服务B)中的接口。
如果服务B可以单独启动起来并且注册到注册中心,则我们仅仅在服务A的启动类中添加@EnableFeignClients注解即可; 如果服务B没有单独启动起来,而是以Jar包的形式被引入到服务A中,则服务A在启动的时候是不会主动去加载服务B中标注了@FeignClient注解的interface而去自动生成bean对象,这样我们在服务A中的Controller类中以如下这种方式去引入使用服务B中的标注了@FeignClient注解的接口 是会报错的,这个时候就需要使用basePackages属性字段去指明应用程序A在启动的时候需要扫描服务B中的标注了@FeignClient注解的接口的包路径
package com.haha.dde.salc.pub.seq; @Configuration @EnableFeignClients(basePackages = "com.haha.bits.idservice.api.dependency") public class SequenceConfig { } ---------------------------------------------------------------------------------- package com.haha.bits.idservice.api.dependency; @ResponseBody @FeignClient(name = "idservice-client",url = "${feign.client.config.idservice.url}") public interface IIdServiceClient { @PostMapping({"/api/idservice/getsequence"}) long getSequence(@RequestParam("key") String var1); }
工作原理:https://www.csdn.net/tags/NtzacgxsMjc0ODctYmxvZwO0O0OO0O0O.html
3、@Autowired
依赖注入Bean
使用@Autowired注入和applicationContext.getBean获取对象的区别?
---单例模式下(默认情况下):
Autowired与getBean两种方式没有区别,获取的都是同一个对象。---多例模式下:
Autowired是使用的同一个对象,而getBean就是创建的一个新对象。参考:https://blog.csdn.net/baidu_36528788/article/details/81237922
4、@Date
@Data:加在类上,相当于同时使用了@ToString、@EqualsAndHashCode、@Getter、@Setter和@RequiredArgsConstrutor这些注解;
5、@Builder:可以使用构造者模式来设置类属性
主要是用来生成对象,并且可以为对象链式赋值。
6、@AllArgsConstructor:加在类上,可以生成含实体类全参数的构造方法;
@NoArgsConstructor:加在类上,可以生成无参构造方法;
7、@EqualsAndHashCode 比较两个对象的属性
8、@JsonIgnoreProperties(ignoreUnknown = true) 忽略类中不存在的字段
@Data @Builder @NoArgsConstructor @AllArgsConstructor @EqualsAndHashCode(callSuper = false) @JsonIgnoreProperties(ignoreUnknown = true) @ApiModel(value = "合同模板新增请求DTO", description = "请求/响应参数") public class CreateTemplateReqDTO extends AbstractDTO { @ApiModelProperty(value = "模板名称") private String templateName; @NotNull(message = "规格id不能为空") @ApiModelProperty(value = "规格id") private Long specId; }
9、@CrossOrigin
先说明@CrossOrigin是用来处理跨域请求的注解,在Controller中添加此注解
跨域是什么:
跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制。
所谓同源是指,域名,协议,端口均相同如: http://www.index.com:8080
http是协议名
www.index.com是域名
8080是端口号浏览器执行javascript脚本时,会检查这个脚本属于哪个页面,如果不是同源页面,就不会被执行。
当域名www.qwe.com下的js代码去访问www.123.com域名下的资源,就会受到限制。**请注意:**localhost和127.0.0.1虽然都指向本机,但也属于跨域。
总结一句话就是:
马老板(a域名)的小弟(a域名下的js代码)想去勾引(访问)汪家(b域名)二嫂(b域名下的资源),因为不是一家人,肯定会受到法律的限制,但是加上@CrossOrigin 注解之后,就好说了(让你能访问不是一个域的文件)
10、 @Accessors(chain = true) 链式访问
11、表实体类相关注解
@TableName:指定映射类的数据库表名
@TableId:表中的主键名
@TableField:非主键普通字段名项目中见到的@Tablename,@TableId,@TableField什么意思
@Data @Builder @EqualsAndHashCode(callSuper = true) @Accessors(chain = true) @NoArgsConstructor @AllArgsConstructor @TableName("CFG_TEMPLATE") public class CfgTemplate extends BaseEntity { private static final long serialVersionUID = 1L; /** 主键ID */ @TableId(value = "PROTOCOL_TEMPLATE_ID", type = IdType.INPUT) private Long protocolTemplateId; /** 模板ID */ @TableField(value = "TEMPLATE_ID") private Long templateId; /** 创建日期 --- 自动设置时间 */ @TableField(value = "CREATE_DATE", fill = FieldFill.INSERT) private LocalDateTime createDate; /** 更新日期 --- 自动设置时间 */ @TableField(value = "UPDATE_DATE", fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateDate; /** 生效日期 */ @TableField(value = "VALID_DATE") private LocalDateTime validDate; }
12、@AliasFor注解
13、@MapperScan