目录
1. @EnableJpaAuditing,@EntityListeners(AuditingEntityListener.class)
2. Lombok标签之 @Data @AllArgsConstructor @NoArgsConstructor @Builder @Slf4j
3. @ApiModel,@ApiModelProperty,@Api, @ApiOperation
5. @RestController,@RequestMapping("xxx")
【写在前面】
在项目中使用了SpringBoot的框架,里面涉及了一些常用注解。因此逐个查资料对这些注解做了进一步的了解,下文内容非全原创,是根据所查询的资料的汇总,结合自己的实际使用。仅供学习,如侵,请告知,会删。
相关文章:Spring中的一些常用注解
1. @EnableJpaAuditing,@EntityListeners(AuditingEntityListener.class)
项目中每条数据在创建或修改时,如果都需要人为的手动记录它创建人,创建时间,修改人,修改时间,代码冗余且显得很不友好。
Spring data JPA 为我们提供了审计功能。
Spring JPA中,支持在字段或方法上进行注解:
@CreateDate
@CreatedBy
@LastModifiedDate
@LastModifiedBy
1.1 上述四个注解的具体含义:
@CreateDate:
表示该字段是创建时间字段,在这个实体被insert时,会自动填充创建的时间,不用手动填充该字段。
@CreatedBy:
表示该字段是创建人字段,在这个实体被insert时,会自动填充创建人字段,不用手动填充。
@LastModifiedDate:
表示该字段是更新时间字段,在这个实体(实体中某个字段或方法)被更新时,会自动填充更新的时间,不用手动填充该字段。
@LastModifiedBy:
表示该字段是更新人字段,在这个实体被更新时,会自动填充更新人字段,不用手动填充。
1.2 如何实现自动填充功能
(1)在项目的启动类上添加注解 @EnableJpaAuditing:开启审计/监听功能。如下:
(2)在实体类上添加@EntityListeners(AuditingEntityListener.class):开启实体类监听。如下:
(3)在需要的字段上加上@CreatedDate、@LastModifiedDate等注解。如下:
(4)实现 AuditorAware接口来返回你需要插入的值
补充:
使用@CreatedBy或@LastModifiedBy,必须实现AuditorAware接口重写getCurrentAuditor方法。在定义@CreatedBy或@LastModifiedBy时,属性类型必须和AuditorAware接口的泛型类型相同。
2. Lombok标签之 @Data @AllArgsConstructor @NoArgsConstructor @Builder @Slf4j
Lombok是一款在java开发中简洁化代码十分有用的插件工具,使用Lombok注解,就可以不用反复地去写Getter,Setter,Constructor等一些代码了。
@Data:
使用后就不用再去手写Getter,Setter,equals,canEqual,hasCode,toString等方法了,注解后在编译时会自动加进去。
@AllArgsConstructor:
使用后添加一个构造函数,该构造函数含有所有已声明字段属性参数。
@NoArgsConstructor:
使用后创建一个无参构造函数。
@Builder:
作用之一是为了解决在某个类有很多构造函数的情况,也省去写很多构造函数的麻烦。在设计模式中的思想是:用一个内部类去实例化一个对象,避免一个类出现过多构造函数。
@Log4j:
注解在类上;为类提供一个属性名为log的 log4j 日志对象
@Slf4j:
注解在类上;为类提供一个 属性名为log 的 log4j 日志对象。可以替代:private final Logger logger = LoggerFactory.getLogger(当前类名.class)
@Setter:
注解在属性上;为属性提供 setting 方法
@Getter:
注解在属性上;为属性提供 getting 方法
3. @ApiModel,@ApiModelProperty,@Api, @ApiOperation
(1)什么是swagger?
swagger是当前最好用的Restful API文档生成的开源项目, 通过swagger-spring项目实现了springMVC框架的无缝集成功能, 方便生成restful风格的接口文档。
注意swagger和spring的版本兼容性问题:Swagger2版本和SpringBoot版本不匹配,报错
同时, swagger-ui还可以测试spring restful风格的接口功能。
(2)常用注解:
@ApiModel:
使用场景:在实体类上使用,标记类是swagger的解析类。
作用:提供有关swagger模型的其它信息,类将在操作中用作类型时自动内省。
@ApiModelProperty:
使用场景:使用在被@ApiModel注解的模型类的属性上。表示对model属性的说明或数据操作更改 。
作用:添加和操作模型属性的数据。
@Api:
使用场景:contoller类上。
value - 字段说明, description - 注释说明这个类
@ApiOperation:
使用场景:@ApiOperation(value = “接口说明”, httpMethod = “接口请求方式”, response = “接口返回参数类型”, notes = “接口发布说明”), 其他参数可参考源码;
作用:用来构建Api文档的
需要引入相关的swagger依赖,比如:
<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.9.2</version> </dependency>
4. @Service
(1)Service层
服务层,即对一个或多个DAO进行的再次封装,封装成一个服务,所以这里也就不会是一个原子操作了,需要事务控制。
service层主要负责业务模块的应用逻辑应用设计。首先设计接口,再设计其实现类,接着在Spring的配置文件中配置其实现的关联。这样我们就可以在应用中调用service接口来进行业务处理。
service层的业务实现,具体要调用已经定义的dao层接口,封装service层业务逻辑,有利于通用的业务逻辑的独立性和重复利用性。即,建议将业务的实现放到service层中。
(2)@Service注解
属于业务逻辑层,service或者manager层
默认按照名称进行装配,名称可以通过name属性指定,如果没有name属性,注解写在字段上时,默认去字段名进行查找,如果注解写在setter方法上,默认按照方法属性名称进行装配。
当找不到匹配的bean时,才按照类型进行装配,如果name名称一旦指定就会按照名称进行装配。
示例如图:
5. @RestController,@RequestMapping("xxx")
(1)@RestController
@RestController 标签等价于@Controller+@ResponseBody。
@Controller 将当前修饰的类注入SpringBoot IOC容器,使得从该类所在的项目跑起来的过程中,这个类就被实例化。当然也有语义化的作用,即代表该类是充当Controller的作用。
@ResponseBody 它的作用就是指该类中所有的API接口返回的数据,甭管你对应的方法返回Map或是其他Obejct, 它会以Json字符串的形式返回给客户端。
(2)@RequestMapping("/api/case")
@RequestMapping注解可以定义不同的处理器映射规则。
主要定义在方法之上,Controller类上也可以使用。
在类上添加@RequestMapping(url),指定通用请求前缀, 限制此类下的所有方法请求url必须以此请求前缀开头,通过此方法对url进行分类管理。见下方截图。
@GetMapping
@PostMapping
--- consumes属性:指定处理请求的提交内容类型(Content-Type),例如application/json、text/html等等,只有命中了对应的Content-Type的值才会接受该请求。
--- produces属性:指定返回的内容类型,仅当某个请求的请求头中的(Accept)类型中包含该指定类型才返回,如果返回的是JSON数据一般考虑使用application/json;charset=UTF-8。
@PutMapping
@PatchMapping
@DeleteMapping
6. @Entity
该注解加在实体类上,定义该对象将会成为被JPA管理的实体,映射到指定的数据库。
7. @Table
该注解用来说明该实体类对应数据库和表,其中name =“xxx",用来表示数据表的名字,catalog = “xxx"是数据库的名字
8. @SpringBootApplication
(1)作用:
创建SpringBoot项目时默认生成的,放置在Springboot启动类上,表明该类是开启Springboot容器的入口。
@SpringBootApplication注解声明的类就是main函数所在的启动类,
因此扫描的包是该类所在包及其子包。因此,一般启动类会放在一个比较前的包目录中。
@EnableJpaAuditing
@SpringBootApplication
public class AutotestApplication {
public static void main(String[] args) {
SpringApplication.run(AutotestApplication.class, args);
}
}
(2)这是一个复合注解,里面包含了包扫描/自动注入/配置注入的功能。主要有以下三个注解:
@SpringBootConfiguration:
在这个类的源码中又有一个@Configuration的注解。
@Configuration这个注解的作用就是声明当前类是一个配置类,然后Spring会自动扫描到添加了@Configuration的类,读取其中的配置信息。
而@SpringBootConfiguration是来声明当前类是SpringBoot应用的配置类,项目中只能有一个。所以一般我们无需自己添加。
@EnableAutoConfiguration:
开启自动配置,告诉SpringBoot基于所添加的依赖,去“猜测”你想要如何配置Spring。
比如我们引入了spring-boot-starter-web,而这个启动器中帮我们添加了tomcat、SpringMVC的依赖,此时自动配置就知道你是要开发一个web应用,所以就帮你完成了web及SpringMVC的默认配置了!
我们使用SpringBoot构建一个项目,只需要引入所需框架的依赖,配置就可以交给SpringBoot处理了。
@ComponentScan:
配置组件扫描的指令。
提供了类似与<context:component-scan>标签的作用。
通过basePackageClasses或者basePackages属性来指定要扫描的包。
如果没有指定这些属性,那么将从声明这个注解的类所在的包开始,扫描包及子包。