在springboot中,经常会用到一些注解,它们各自代表着什么呢?在这个属于我们的节日里,快来了解一下吧!
1、@SpringBootApplication
一般不会主动去使用它,但是要知道它是一个组合注解,@Configuration 、@EnableAutoConfiguration 、@ComponentScan 注解的集合。
2、@Configuration
这是 Spring 3.0 添加的一个注解,用来代替 applicationContext.xml 配置文件,所有这个配置文件里面能做到的事情都可以通过这个注解所在类来进行注册。用@Configuration注释类表明是一个配置类,允许在 Spring 上下文中注册额外的 bean 或导入其他配置类。
3、@EnableAutoConfiguration
该注解就是用来开启自动配置的,一般情况下也是需要去配置的,后续会更新。
4、@ComponentScan
@ComponentScan用于类或接口上主要是指定扫描路径,spring会把指定路径下带有指定注解的类自动装配到bean容器里。会被自动装配的注解包括@Controller、 @Service、@Component、@Repository等等。其作用等同于
这几个注解一般会在启动类里边配置,如下图。
5、@Autowired、@Qualifier
当有多个同一类型的Bean时,可以用@Qualifier(“name”)来指定。与@Autowired配合使用。
6、@Component,@Respository,@Service,@Controller
@Component :通用注解,可标注任意类为 Spring组件。如果一个 Bean 不知道属于哪个层,可以使用@Component 注解标注。
@Repository : 对应持久层即 Dao 层,主要用于数据库相关操作。
@Service : 对应服务层,主要涉及一些复杂的逻辑,需要用到 Dao 层。
@Controller : 对应 Spring MVC 控制层,主要用户接受用户请求并调用 Service 层返回数据给前端页面。
7、@RequestMapping
用于类或方法上,用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径,也可以用来处理请求地址映射的注解。
属性释义:
value: 指定请求的实际地址;
method: 指定请求的method类型, GET、POST、PUT、DELETE等;
consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
params: 指定request中必须包含某些参数值是,才让该方法处理。
headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。
8、@ResponseBody
@ResponseBody注解既可以在方法上使用,也可以在类上使用,在类上使用表明该类中所有方法均返回JSON数据,也可以与@Controller注解合并为@RestController。它的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据。
注意:在使用此注解之后不会再走视图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。
9、@GetMapping @PutMapping @PostMapping @DeleteMapping
也就是对应HTTP的请求方式,
GET :请求从服务器获取特定资源。举个例子:GET /users(获取所有学生:查询)
POST :在服务器上创建一个新的资源。举个例子:POST /users(创建学生:新增)
PUT :更新服务器上的资源(客户端提供更新后的整个资源)。举个例子:PUT /users/12(更新编号为 12 的学生:更新/编辑)
DELETE :从服务器删除特定的资源。举个例子:DELETE /users/12(删除编号为 12 的学生:删除)
以@DeleteMapping为例子来看一下
@DeleteMapping("/users/{userId}")等价于@RequestMapping(value="/users/{userId}",method=RequestMethod.DELETE)
10、@PathVariable
@PathVariable是用来获取路径参数的。
11、@RequestParam
用来获取查询参数。
语法:@RequestParam(value=”参数名”,required=”true/false”,defaultValue=””)
value:参数名
required:是否包含该参数,默认为true,表示该请求路径中必须包含该参数,如果不包含就报错。
defaultValue:默认参数值,如果设置了该值,required=true将失效,自动为false,如果没有传该参数,就使用默认值。
12、@RequestBody
不要和@ResponseBody混淆了,@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的),Content-Type 为 application/json 格式;GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交。
比如前端以post方式传json字符串,此时后端就可以使用@RequestBody来接收
13、@DateTimeFormat、@JsonFormat
实体类User有个Date类型的属性birthday,然后用该实体类接收从前端传来的参数,我们会发现报了400异常。因为前端传去的是字符串类型,而实体类中是Date类型,那么此时就可以使用@DateTimeFormat,但是格式不对,所以需要用到@JsonFormat,timezone:是时间设置为东八区,避免时间在转换中有误差。
简而言之,@DateTimeFormat是前台到后台的时间转换,而@JsonFormat是后台到前台的转换。
14、@Import
这是 Spring 3.0 添加的新注解,用来导入一个或者多个 @Configuration 注解修饰的类,这在 Spring Boot 里面应用很多。@Import只能用在类上 ,@Import通过快速导入的方式实现把实例加入spring的IOC容器中,用法如下:
@Import({ 类名.class , 类名.class... })
15、@Entity实体类注解
@Table(name =“数据库表名”),这个注解也注释在实体类上,对应数据库中相应的表。
@Id、@Column注解用于标注实体类中的字段,pk字段标注为@Id,其余@Column。
16、事务注解 @Transactional
Spring中,编程式事务管理和声明式事务管理两种方式可实现事务。
编程式事务管理: 编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。
声明式事务管理: 建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务,通过@Transactional就可以进行事务操作,更快捷而且简单,推荐使用。
17、@ControllerAdvice 统一处理异常
@ControllerAdvice 注解定义全局异常处理类。
@ControllerAdvice
public class followExceptionHandler {
}
18、@ExceptionHandler 注解声明异常处理方法
@ControllerAdvice
public class followExceptionHandler {
@ExceptionHandler(Exception.class)
@ResponseBody
String handleException(){
return "Exception full!";
}
}
19、@ImportResource
这是 Spring 3.0 添加的新注解,用来导入一个或者多个 Spring 配置文件,这对 Spring Boot 兼容老项目非常有用,因为有些配置无法通过 Java Config 的形式来配置就只能用这个注解来导入。
20、@PropertySource
导入properties文件
21、PropertySources
@PropertySource 的集合
22、@Scope
指定bean的作用域,默认singleton,其它包括prototype、request、session、globalSession
23、@Lazy
使bean懒加载,取消bean预初始化。
24、@Primary
自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者,否者将抛出异常。
25、@SpringBootConfiguration
这个注解就是 @Configuration 注解的变体,只是用来修饰是 Spring Boot 配置而已,或者可利于 Spring Boot 后续的扩展。
这些就是springboot中常用的一些注解啦,希望能够对大家有帮助。