Spirng Boot 注解

Spring Boot 常用注解

@SpringBootApplication

  • Spring Boot的核心注解,目的是开启自动配置
  • 包含了@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan这个三个注解

@SpringBootConfiguration

  • 启用在上下文中注册额外的Bean或导入额外的配置类
  • 是Spring标准@Configuration的替代方案,有助于在集成测试中检测配置

@EnableAutoConfiguration

  • 启用Spring Boot的自动配置机制

@ComponentScan

  • 组件扫描,应用程序所在的包上启用@Component扫描

@Repository

  • 标注数据访问组件,即DAO组件

@Service

  • 标注业务层组件

@RestController

  • 标注控制层组件,用于需要返回纯数据,而不是页面时
  • 包含了@Controller和@ResponseBody

@Controller

  • 标注控制层组件,用于需要返回页面,而不是纯数据时

@Component

  • 标注组件,当组件不易于归类时,使用这个注解进行标注

@ResponseBody

  • 表示该方法的返回结果直接写入HTTP response body中,一般在异步获取数据时使用

  • 使用 @RequestMapping后,返回值通常解析为跳转路径,但是加上 @ResponseBody 后返回结果不会被解析为跳转路径,而是直接写入 HTTP response body 中

@RequestBody

  • 接收前端传递给后端的json字符串中的数据(请求体中的数据)
  • 同一个接收方法里,@RequestBody与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个

注:

  • 一个请求,只有一个RequestBody;一个请求,可以有多个RequestParam
  • RequestBody 接收的是请求体里面的数据;而RequestParam接收的是key-value里面的参数(即:如果参数时放在请求体中,传入后台的话,那么后台要用@RequestBody才能接收到;如果不是放在请求体中的话,那么后台接收前台传过来的参数时,要用@RequestParam来接收,或则形参前什么也不写也能接收。)
  • 如果参数前写了@RequestParam(xxx),那么前端必须有对应的xxx名字才行(不管其是否有值,当然可以通过设置该注解的required属性来调节是否必须传),如果没有xxx名的话,那么请求会出错,报400
  • 如果参数前不写@RequestParam(xxx)的话,那么就前端可以有可以没有对应的xxx名字才行,如果有xxx名的话,那么就会自动匹配;没有的话,请求也能正确发送

@Bean

  • 相当于XML中的bean标签,放在方法的上面,而不是类,意思是产生一个bean,并交给spring管理

@Autowired

  • byType方式。把配置好的Bean拿来用,完成属性、方法的组装,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作
  • 加上(required=false)时,就算找不到bean也不报错

@Qualifier

  • 有多个同一类型的Bean时,可以用@Qualifier(“name”)来指定对应的bean。与@Autowired配合使用

@Resource(name=”name”,type=”type”)

  • bean自动装配,没有括号内内容的话,默认byName;与Autowired类似

@RequestMapping

  • 处理请求地址映射,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径
注解属性
params属性
  • 指定request中必须包含某些参数值是,才让该方法处理
headers属性
  • 指定request中必须包含某些指定的header值,才能让该方法处理请求
value属性
  • 指定请求的实际地址,指定的地址可以是URI Template 模式
method属性
  • 指定请求的method类型, GET、POST、PUT、DELETE等
consumes属性
  • 指定处理请求的提交内容类型(Content-Type),如application/json,text/html
produces属性
  • 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回

@GetMapping、PostMapping和DeleteMapping

  • 与@RequestMapping(method = “GET|POST|DELETE”)等价

@RequestParam

  • 用在方法的参数前面。相当于 request.getParameter

@PathVariable

  • 路径变量
  • 参数与大括号里的名字相同的话,注解后括号里的内容可以不填

例:

@DeleteMapping("/business/{id}")
public Result<String > delete(@PathVariable("id") @ApiParam(value = "id",required = true) Integer id){
       return null;
}

@EnableTransactionManagement

  • 开启事务支持

  • 启注解事务管理,等同于xml配置方式的 <tx:annotation-driven />

@Transactional

  • 在访问数据库的Service方法上添加该注解,使用事务
事物传播行为介绍:
  • @Transactional(propagation=Propagation.REQUIRED)
    如果有事务, 那么加入事务, 没有的话新建一个(默认情况下)
  • @Transactional(propagation=Propagation.NOT_SUPPORTED)
    容器不为这个方法开启事务
  • @Transactional(propagation=Propagation.REQUIRES_NEW)
    不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务
  • @Transactional(propagation=Propagation.MANDATORY)
    必须在一个已有的事务中执行,否则抛出异常
  • @Transactional(propagation=Propagation.NEVER)
    必须在一个没有的事务中执行,否则抛出异常(与Propagation.MANDATORY相反)
  • @Transactional(propagation=Propagation.SUPPORTS)
    如果其他bean调用这个方法,在其他bean中声明事务,那就用事务.如果其他bean没有声明事务,那就不用事务.
事物超时设置:
  • @Transactional(timeout=30) //默认是30秒
事务隔离级别:
  • @Transactional(isolation = Isolation.READ_UNCOMMITTED)
    读取未提交数据(会出现脏读, 不可重复读) 基本不使用
  • @Transactional(isolation = Isolation.READ_COMMITTED)
    读取已提交数据(会出现不可重复读和幻读)
    @Transactional(isolation = Isolation.REPEATABLE_READ)
    可重复读(会出现幻读)
  • @Transactional(isolation = Isolation.SERIALIZABLE)
    串行化
常用参数说明
  • readOnly:该属性用于设置当前事务是否为只读事务,设置为true表示只读,false则表示可读写,默认值为false。例如:@Transactional(readOnly=true)

  • rollbackFor:该属性用于设置需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,则进行事务回滚。

    例如:

    指定单一异常类:@Transactional(rollbackFor=RuntimeException.class)

    指定多个异常类:@Transactional(rollbackFor={RuntimeException.class, Exception.class})

  • rollbackForClassName:该属性用于设置需要进行回滚的异常类名称数组,当方法中抛出指定异常名称数组中的异常时,则进行事务回滚。

    例如:

    指定单一异常类名称:@Transactional(rollbackForClassName=“RuntimeException”)

    指定多个异常类名称:@Transactional(rollbackForClassName={“RuntimeException”,“Exception”})

  • noRollbackFor:该属性用于设置不需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,不进行事务回滚。

    例如:

    指定单一异常类:@Transactional(noRollbackFor=RuntimeException.class)

    指定多个异常类:@Transactional(noRollbackFor={RuntimeException.class, Exception.class})

  • noRollbackForClassName:该属性用于设置不需要进行回滚的异常类名称数组,当方法中抛出指定异常名称数组中的异常时,不进行事务回滚。

    例如:

    指定单一异常类名称:@Transactional(noRollbackForClassName=“RuntimeException”)

    指定多个异常类名称:@Transactional(noRollbackForClassName={“RuntimeException”,“Exception”})

  • propagation:该属性用于设置事务的传播行为。

    例如:

    @Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)

  • isolation:该属性用于设置底层数据库的事务隔离级别,事务隔离级别用于处理多事务并发的情况,通常使用数据库的默认隔离级别即可,基本不需要进行设置

  • timeout:该属性用于设置事务的超时秒数,默认值为-1表示永不超时

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值